我对laravel很新。我有一个基本问题,在laravel中添加常量的最佳方法是什么。 我知道我们用来添加常量的.env方法。 我还制作了一个常量文件,用于我的项目。 例如:
define('OPTION_ATTACHMENT', 13);
define('OPTION_EMAIL', 14);
define('OPTION_MONETERY', 15);
define('OPTION_RATINGS', 16);
define('OPTION_TEXTAREA', 17);
等等。它可以达到100或更多记录。那么编写常量的最佳方法应该是什么。 .env方法。或者添加constant.php文件?
谢谢
答案 0 :(得分:68)
对于应用程序中全局使用的大多数常量,将它们存储在配置文件中就足够了。这也很简单
在config
目录中创建一个新文件。我们称之为constants.php
在那里你必须返回一个配置值数组。
return [
'options' => [
'option_attachment' => '13',
'option_email' => '14',
'option_monetery' => '15',
'option_ratings' => '16',
'option_textarea' => '17',
]
];
您可以按如下方式访问它们
Config::get('constants.options');
// or if you want a specific one
Config::get('constants.options.option_attachment');
答案 1 :(得分:19)
我使用别名类常量:
首先,创建包含常量的类:App/MyApp.php
例如
namespace App;
class MyApp {
const MYCONST = 'val';
}
然后将其添加到config/app.php
'aliases' => [
//...
'MyApp' => App\MyApp::class,
最后在任何地方使用它们(控制器甚至刀片):
MyApp::MYCONST
答案 2 :(得分:9)
您的问题是关于'最佳做法',您询问了'.env方法'。
.env仅适用于因环境更改而发生变化的变量。不同环境的例子:测试,验收,生产。
因此.env包含数据库凭据,API密钥等
.env应该(imho)永远不会包含在所有环境中相同的常量。只需使用建议的配置文件即可。
答案 3 :(得分:8)
您可以在 root directory / config / paths.php
中创建一个名为 paths.php 的文件。将此数据插入path.php
define('OPTION_ATTACHMENT', 13);
define('OPTION_EMAIL', 14);
define('OPTION_MONETERY', 15);
define('OPTION_RATINGS', 16);
define('OPTION_TEXTAREA', 17);
注意:确保运行命令:php artisan config:clear
答案 4 :(得分:4)
首先在app目录中创建Constants
文件夹。
然后你制作Constants.php
。在此文件中定义常量
例如:
define('ONE', '1');
define('TWO', '2');
您修改了composer.json
或者,您可以使用composer.json加载bootstrap / constants.php文件,方法是将以下代码添加到“autoload”部分,如下所示:
"autoload": {
"files": [
"bootstrap/constants.php"
]
}
更新你的作曲家!
答案 5 :(得分:3)
我会亲自为此创建一个类。
<?php
namespace App\Transaction\Constants;
/**
* Class TransactionTypeConstant.
*/
final class TransactionTypeConstant
{
public const TYPE_CREDIT = 'CREDIT';
public const TYPE_DEBIT = 'DEBIT';
}
并像这样使用它:
<?php
namespace App\Transaction;
use App\Transaction\Constants\TransactionTypeConstant;
class Transaction
{
/**
* Execute the task.
*
* @return object
*/
public function run()
{
if ($transaction->type === TransactionTypeConstant::TYPE_DEBIT) {
//do something
}
}
}
答案 6 :(得分:2)
另一种方式如下:
,添加如下指令:
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/helpers.php",
"app/config/constants.php"
]
}
答案 7 :(得分:2)
您可以简单地执行以下操作:
将常量放入主数组上的“ config / app.php”中,例如:
clickCount = 0;
click() {
this.clickCount++;
setTimeout(() => {
if (this.clickCount === 1) {
// single
} else if (this.clickCount === 2) {
// double
}
this.clickCount = 0;
}, 250)
}
在任何需要的地方使用它们:
'CONSTANT_NAME' => 'CONSTANT_VALUE',
答案 8 :(得分:0)
您可以在路由中的web.php文件顶部定义常量,并且可以使用常量名称访问项目中任何位置的常量
define('OPTION_ATTACHMENT', 13);
define('OPTION_EMAIL', 14);
define('OPTION_MONETERY', 15);
define('OPTION_RATINGS', 16);
define('OPTION_TEXTAREA', 17);
答案 9 :(得分:0)
require app_path().'/constants.php';
define('ADMIN', 'administrator');
或-
您还可以移动更敏感的信息
return [
'hash_salt' => env('HASH_SALT'),
];
并像以前一样使用它:
echo Config::get('constants.hash_salt');
答案 10 :(得分:0)
我认为使用帮助程序文件定义常量的最佳方法。检查我的解决方案。
在 composer.json
中定义文件路径
"extra": {
"laravel": {
"dont-discover": []
}
},
"autoload": {
"files": [
"app/helpers.php",
"app/Helper/function.php" // constant defined here
],
app / Helper / function.php
define("assetPath","UI/");
define("viewPath","UI/");
在项目中的任何地方使用此常量。我正在刀片文件中使用。
<script src="{{asset(assetPath.'js/jquery.min.js')}}"></script>
<script src="{{asset(assetPath.'js/popper.min.js')}}"></script>
<script src="{{asset(assetPath.'js/bootstrap.min.js')}}"></script>
我的方法比这更好
Config::get('constants.options');
Config::get('constants.options.option_attachment');
这是另一个问题,您必须为此运行cache:clear或cache命令。但是我的方法不需要这样做。