¿Cuál es la mejor práctica para agregar constantes en laravel? (Larga lista)

6 minutos de lectura

Soy bastante nuevo en laravel. Tengo una pregunta básica: ¿Cuál es la mejor manera de agregar constantes en laravel? Conozco el método .env que usamos para agregar las constantes. También he creado un archivo de constantes para usarlos en mi proyecto. Por ejemplo:

define('OPTION_ATTACHMENT', 13);
define('OPTION_EMAIL', 14);
define('OPTION_MONETERY', 15);
define('OPTION_RATINGS', 16);
define('OPTION_TEXTAREA', 17);

Y así. Puede alcanzar hasta 100 o más registros. Entonces, ¿cuál debería ser el mejor enfoque para escribir las constantes? El método .env. ¿O agregando el archivo constant.php?

Gracias

  • puede elegir muchos lugares: 1) una (mi) base de datos SQL normal 2) una historia de clave-valor/base de datos nosql como redis 3) la carpeta de configuración, usando su propio archivo de configuración y probablemente muchos más. La mejor práctica sería probablemente la opción 3 y también la más rápida

    – en línea Tomás

    10 de febrero de 2017 a las 9:28

  • Tal vez esta respuesta pueda ser útil para usted: stackoverflow.com/a/26062788/6028607

    – Vicente G.

    10 de febrero de 2017 a las 9:29

  • @VincentG como he explicado anteriormente. No creo que .env sea la mejor opción. Tengo una larga lista de constantes.

    – Faran Kan

    10 de febrero de 2017 a las 10:33

  • Posible duplicado de Laravel: ¿Dónde almacenar datos y constantes de matrices globales?

    – Programador de pila

    25 de abril de 2019 a las 10:13

  • Su respuesta aceptada no se alinea con su pregunta o ejemplo. Una constante no es una variable de configuración que cambiará. Es exactamente como está etiquetado, un valor constante que no cambia pase lo que pase. La respuesta dada por @Neekobus es el enfoque correcto para las constantes. Es posible que desee revisar la respuesta aceptada.

    – Juan C.

    11 de septiembre de 2020 a las 15:01

avatar de usuario
K Arun Singh

Para la mayoría de las constantes utilizadas globalmente en la aplicación, basta con almacenarlas en archivos de configuración. tambien es bastante sencillo

Crear un nuevo archivo en el config directorio. llamémoslo constants.php

Allí tiene que devolver una matriz de valores de configuración.

return [
    'options' => [
        'option_attachment' => '13',
        'option_email' => '14',
        'option_monetery' => '15',
        'option_ratings' => '16',
        'option_textarea' => '17',
    ]
];

Y puedes acceder a ellos de la siguiente manera

config('constants.options');
// or if you want a specific one
config('constants.options.option_attachment');

  • @KArunSingh, ¿por qué no apuntaste a duplicar stackoverflow.com/questions/26854030/…?

    – blamb

    10 de agosto de 2017 a las 17:16


  • in mathematics, the adjective constant means non-varying lo que significa que esta no es la “respuesta correcta”

    – naT erraT

    3 de noviembre de 2017 a las 20:09

  • recuerda correr php artisan config:cache después de agregar el archivo constants.php

    – elijah7

    7 de noviembre de 2017 a las 15:54


  • También creo que debería ser \Config::get('constants.options'); o \Config::get('constants.options.option_attachment'); con barra invertida

    – Pedro Luz

    25 de enero de 2018 a las 10:57

  • También se puede llamar con el config ayudante config('constants.options');

    – Adán

    14 de septiembre de 2018 a las 7:03

Yo uso constantes de clase con alias:

Primero, cree su clase que contenga sus constantes: App/MyApp.php por ejemplo

namespace App;

class MyApp {
   const MYCONST = 'val';
}

Luego agréguelo a las clases con alias en el config/app.php

'alias' => [
  //...
  'MyApp' => App\MyApp::class,

Finally use them wherever you like (controllers or even blades) :

MyApp::MYCONST

  • I like this approach. This will help other developers to easily track where constants are coming from instead of declaring it to your auto load. Is there any drawback of using this approach?

    – SMPLYJR

    Oct 29, 2019 at 1:33

  • For constants, I can’t see any drawbacks. For config (changing with environment) is not fitted. Use Config:get instead.

    – Neekobus

    Oct 30, 2019 at 10:46

  • This is a better and faster option than the “accepted answer” thanks!

    – gtamborero

    May 23, 2020 at 21:23

  • like that approach as well (just remind of using composer dump-autoload after the changes

    – heavyrick

    Aug 20, 2020 at 16:49

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.

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"
    ]
}

¡Y actualiza tu compositor!

avatar de usuario
Punto y coma de desarrollo

Puede crear un archivo llamado caminos.php en directorio raíz/config/paths.php

Inserte estos datos en paths.php

define('OPTION_ATTACHMENT', 13);
define('OPTION_EMAIL', 14);
define('OPTION_MONETERY', 15);
define('OPTION_RATINGS', 16);
define('OPTION_TEXTAREA', 17);

Nota: asegúrese de ejecutar el comando: php artisan config:clear

  • Por qué paths.php? Parece bastante aleatorio.

    – Joel Mellón

    19 sep 2021 a las 0:43

Creo que no deberías tener un solo lugar para todas tus constantes. Especialmente ningún archivo llamado constance.php.

Utilizo la constancia de PHP en las clases y me refiero a ellas en el código, por lo que es más legible, generalmente para evitar números mágicos y errores tipográficos en las cadenas.

Car::where('car_type','=', 'fast_car')->get();

y más bien tener

Car::where('car_type','=', CarType::FAST)->get();

Si es un valor que depende de su entorno (como la configuración del correo electrónico, debe ser diferente local frente a la producción), entonces debe agregarlo a los archivos correspondientes en la carpeta de configuración (por ejemplo, ‘/config/mail.php’). También puede simplemente agregar un nuevo archivo en la carpeta de configuración. Un archivo de configuración devuelve una matriz, por lo que podría verse así:

<?php

return [
  'your_option' => env('YOUR_OPTION')
];

y puedes leerlo usando el ayudante de configuración:

config('your_config_file.your_option');

Es importante nunca llamar al env función fuera de un archivo de configuración, ya que la función env devuelve nulo fuera de un archivo de configuración cuando el caché está habilitado.

Si la opción no depende de su entorno, simplemente puede agregarla directamente al archivo de configuración correspondiente.

<?php

return [
  'your_option' => 10
];

  • Por qué paths.php? Parece bastante aleatorio.

    – Joel Mellón

    19 sep 2021 a las 0:43

avatar de usuario
Al Foice ѫ

Yo personalmente crearía una clase para eso.

<?php

namespace App\Transaction\Constants;

/**
 * Class TransactionTypeConstant.
 */
final class TransactionTypeConstant
{
    public const TYPE_CREDIT = 'CREDIT';
    public const TYPE_DEBIT = 'DEBIT';
}

y usarlo así:

<?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
        }
    }
}

  • Este enfoque funcionará para todos. Sin embargo, en este caso, las configuraciones no se almacenan en caché.

    – Abhijeet Umbarkar

    19 de julio de 2021 a las 4:53

  • Me gusta esta solución porque se ve limpia y funciona para todos los escenarios.

    – Código Ninja

    11 de noviembre de 2021 a las 14:46

  • para mi esta es la mejor manera de hacerlo, simple y elegante, gracias

    – edocollado

    7 abr a las 20:40

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad