可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am rather new to laravel. I have a basic question, What is the best way to add constants in laravel.
I know the .env method that we use to add the constants.
Also I have made one constants file to use them for my project.
For example:
define('OPTION_ATTACHMENT', 13);
define('OPTION_EMAIL', 14);
define('OPTION_MONETERY', 15);
define('OPTION_RATINGS', 16);
define('OPTION_TEXTAREA', 17);
And so on. It can reach upto 100 or more records. So What should be the best approach to write the constants. The .env method. Or adding the constant.php file?
Thanks
回答1:
For most constants used globally across the application, storing them in config files is sufficient. It is also pretty simple
Create a new file in the config
directory. Let's call it constants.php
In there you have to return an array of config values.
return [
'options' => [
'option_attachment' => '13',
'option_email' => '14',
'option_monetery' => '15',
'option_ratings' => '16',
'option_textarea' => '17',
]
];
And you can access them as follows
Config::get('constants.options');
// or if you want a specific one
Config::get('constants.options.option_attachment');
回答2:
I use aliased class constants :
First, create your class that contain your constants : App/MyApp.php
for exemple
namespace App;
class MyApp {
const MYCONST = 'val';
}
Then add it to the aliased classes in the config/app.php
'aliases' => [
//...
'MyApp' => App\MyApp::class,
Finally use them wherever you like (controllers or even blades) :
MyApp::MYCONST
回答3:
Your question was about the 'best practices' and you asked about the '.env method'.
.env is only for variables that change because the environment changes. Examples of different environments: test, acceptance, production.
So the .env contains database credentials, API keys, etc.
The .env should (imho) never contain constants which are the same over all environments. Just use the suggested config files for that.
回答4:
You can create a file named paths.php in root directory/config/paths.php
Insert this data into paths.php
define('OPTION_ATTACHMENT', 13);
define('OPTION_EMAIL', 14);
define('OPTION_MONETERY', 15);
define('OPTION_RATINGS', 16);
define('OPTION_TEXTAREA', 17);
Note : make sure to run command : php artisan config:clear
回答5:
First you make Constants
folder inside your app directory.
And then you make Constants.php
. Define your constants in this file
For Example :
define('ONE', '1');
define('TWO', '2');
And you modify the composer.json
Alternatively, you can use composer.json to load the bootstrap/constants.php file by adding the following code to the “autoload” section, like so:
"autoload": {
"files": [
"bootstrap/constants.php"
]
}
And update your composer !
回答6:
In addition to Arun Singh's answer I would recommend you to use helpers.
Inside your helper.php
you may define
if ( ! function_exists('constants'))
{
function constants($key)
{
return config('constants.' . $key);
}
}
Thus instead of
Config::get('constants.options.option_attachment');
you may call
constants('options.option_attachment');
回答7:
Another way as following:
- create the constant.php file in app/Constant directory
in composer.json file, add the directives like this:
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/helpers.php",
"app/config/constants.php"
]
}