我对 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 文件?
谢谢
对于在应用程序中全局使用的大多数常量,将它们存储在配置文件中就足够了。这也很简单
在 config
目录中创建一个新文件。我们称之为constants.php
在那里你必须返回一个配置值数组。
return [
'options' => [
'option_attachment' => '13',
'option_email' => '14',
'option_monetery' => '15',
'option_ratings' => '16',
'option_textarea' => '17',
]
];
您可以按如下方式访问它们
config('constants.options');
// or if you want a specific one
config('constants.options.option_attachment');
我使用别名类常量:
首先,创建包含常量的类:例如 App/MyApp.php
namespace App;
class MyApp {
const MYCONST = 'val';
}
然后将其添加到 config/app.php
中的别名类
'aliases' => [
//...
'MyApp' => App\MyApp::class,
最后在任何你喜欢的地方使用它们(控制器甚至刀片):
MyApp::MYCONST
composer dump-autoload
您的问题是关于“最佳实践”,您询问了“.env 方法”。
.env 仅适用于因环境变化而变化的变量。不同环境的示例:测试、验收、生产。
所以 .env 包含数据库凭证、API 密钥等。
.env 应该(恕我直言)从不包含在所有环境中都相同的常量。只需使用建议的配置文件即可。
首先,您在应用目录中创建 Constants
文件夹。
然后你做Constants.php
。在这个文件中定义你的常量
例如 :
define('ONE', '1');
define('TWO', '2');
然后您修改 composer.json
或者,您可以使用 composer.json 通过将以下代码添加到“autoload”部分来加载 bootstrap/constants.php 文件,如下所示:
"autoload": {
"files": [
"bootstrap/constants.php"
]
}
并更新您的作曲家!
您可以在根目录/config/paths.php 中创建一个名为 paths.php 的文件
将此数据插入paths.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
paths.php
?看起来很随意。
我认为您不应该将所有常量放在一个位置。尤其是没有名为 constance.php
的文件。
我在类中使用 PHP constance 并在代码中引用它们,因此它更具可读性,通常是为了避免字符串中的幻数和拼写错误
Car::where('car_type','=', 'fast_car')->get();
而是有
Car::where('car_type','=', CarType::FAST)->get();
如果它的值取决于您的环境(如电子邮件设置,应该是不同的本地与生产),那么您应该将它添加到配置文件夹中的匹配文件(例如'/config/mail.php')。您也可以在 config 文件夹中添加一个新文件。配置文件返回一个数组,因此它可能如下所示:
<?php
return [
'your_option' => env('YOUR_OPTION')
];
您可以使用配置助手阅读它:
config('your_config_file.your_option');
永远不要在配置文件之外调用 env
函数很重要,因为启用缓存时 env 函数在配置文件之外返回 null。
如果该选项不依赖于您的环境,您可以直接将其添加到匹配的配置文件中。
<?php
return [
'your_option' => 10
];
我会亲自为此创建一个课程。
<?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
}
}
}
另一种方式如下:
在 composer.json 文件的 app/config 目录中创建 constant.php 文件,添加如下指令: "autoload": { "classmap": [ "database/seeds", "database/factories" ], "psr-4 ": { "App\\": "app/" }, "文件": [ "app/helpers.php", "app/config/constants.php" ] }
您可以在位于路由中的 web.php 文件的顶部定义常量,并且可以仅使用常量名称访问项目中的任何地方的常量
define('OPTION_ATTACHMENT', 13);
define('OPTION_EMAIL', 14);
define('OPTION_MONETERY', 15);
define('OPTION_RATINGS', 16);
define('OPTION_TEXTAREA', 17);
你可以简单地这样做:
将你的常量放在主数组上的 'config/app.php' 中,例如:'CONSTANT_NAME' => 'CONSTANT_VALUE',在任何你想要的地方使用它们:{{ Config::get('CONSTANT_NAME') }}
require app_path().'/constants.php';
define('ADMIN', 'administrator');
或者 -
您还可以移动更敏感的信息
return [
'hash_salt' => env('HASH_SALT'),
];
并像以前一样使用它:
echo Config::get('constants.hash_salt');
我认为使用帮助文件定义常量的最佳方法。检查我的解决方案。
在 composer.json 中定义文件路径
"extra": {
"laravel": {
"dont-discover": []
}
},
"autoload": {
"files": [
"app/helpers.php",
"app/Helper/function.php" // constant defined here
],
应用程序/助手/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 命令。但我的方法不需要这个。
不定期副业成功案例分享
in mathematics, the adjective constant means non-varying
这意味着这不是“正确答案”php artisan config:cache
\Config::get('constants.options');
或\Config::get('constants.options.option_attachment');
config
助手config('constants.options');
调用它