variable plantillas globales descargar declarar constantes php laravel laravel-4 global-state

php - plantillas - variables globales laravel



Laravel: ¿Dónde almacenar datos y constantes de matrices globales? (7)

Crear archivo de constantes comunes en Laravel

app / constants.php

define(''YOUR_CONSTANT_VAR'', ''VALUE''); //EX define(''COLOR_TWO'', ''red'');

composer.json agrega la ubicación del archivo en la carga automática en composer.json

"autoload": { "files": [ "app/constants.php" ] }

Antes de que este cambio surta efecto, debe ejecutar el siguiente comando en la Terminal para regenerar los archivos de carga automática de Laravel:

composer dump-autoload

Acabo de empezar a trabajar con Laravel. Necesito reescribir un sistema completo que hice hace algunos años, usando Laravel 4 como marco base. En mi sistema anterior, solía tener un archivo constant.php con algunas constantes declaradas y un archivo globals.php que contenía muchos conjuntos de matrices (por ejemplo, estados de categorías, tipo de eventos, langs, etc.). Al hacerlo, podría usar algo como

foreach ( $langs as $code => $domain ) { // Some stuff }

en cualquier parte de mi aplicación.

Mi pregunta es, ¿cómo puedo almacenar esa información en la llamada "forma laravel". Intenté usar algún tipo de objeto para almacenar esta información, configurándola como un servicio y creando una fachada:

aplicación / bibliotecas / Proyecto / Constantes.php

namespace PJ; class Constants { public static $langs = [ ''es'' => ''www.domain.es'', ''en'' => ''www.domain.us'', ''uk'' => ''www.domain.uk'', ''br'' => ''www.domain.br'', ''it'' => ''www.domain.it'', ''de'' => ''www.domain.de'', ''fr'' => ''www.domain.fr'' ]; }

aplicación / bibliotecas / Proyecto / ConstantsServiceProvider.php

namespace PJ; use Illuminate/Support/ServiceProvider; class ConstantsServiceProvider extends ServiceProvider { public function register() { $this->app->singleton(''PJConstants'', function() { return new Constants; }); } }

aplicación / bibliotecas / Proyecto / ConstantsFacade.php

namespace PJ; use Illuminate/Support/Facades/Facade; class ConstantsFacade extends Facade { protected static function getFacadeAccessor() { return ''PJConstants''; } }

composer.json

"psr-4": { "PJ//": "app/libraries/Project" },

y entonces accedo a esa propiedad como PJ / Constants :: $ langs .

Esto funciona, pero dudo que sea la forma más eficiente / correcta de hacerlo. Quiero decir, ¿es la forma correcta de "propagar" una variable creando un proveedor de servicios y fachadas y todo eso? ¿O dónde debo poner estos datos?

Gracias por cualquier consejo

EDITAR # 01

Los datos que quiero pasar a todos los controladores y vistas se pueden configurar directamente en el script, como en el ejemplo al principio de mi publicación, pero también se pueden generar dinámicamente, por ejemplo, desde una base de datos. Estos datos podrían ser una lista de categorías. Los necesito en todas las vistas para generar una barra de navegación, pero también los necesito para definir algunos patrones de enrutamiento (como / categoría / subcategoría / producto), y también para analizar cierta información en varios controladores (como obtener información de la categoría que contiene X producto).

Mi matriz es algo así como:

$categories = [ 1 => [''name'' => ''General'', ''parent'' => 0, ''description'' => ''Lorem ipsum...''], 2 => [''name'' => ''Nature'', ''parent'' => 0, ''description'' => ''Lorem ipsum...''], 3 => [''name'' => ''World'', ''parent'' => 0, ''description'' => ''Lorem ipsum...''], 4 => [''name'' => ''Animals'', ''parent'' => 2, ''description'' => ''Lorem ipsum...''] ]

Solo como un ejemplo. El índice es la identificación de la categoría, y el valor es información asociada con la categoría.

Necesito esta matriz, también, disponible en todos los Controladores y Vistas.

Entonces, si lo guardo como una variable de configuración, ¿está bien? ¿O de qué otra forma podría almacenar estos datos? ¿Cuál sería la mejor forma semánticamente correcta?

Gracias



Creo que la mejor manera es usar la localización.

Crear un nuevo archivo messages.php en resources/lang/en ( en porque eso es lo que está configurado en mi config/app ''locale''=>''en'' ) devolver una matriz de todos sus valores

return [ ''welcome'' => ''Welcome to our application'' ];

para recuperar para laravel 5.3 y abajo

echo trans(''messages.welcome'');

o

echo Lang::get(''messages.welcome'');

para uso 5.4

echo __(''messages.welcome'')

localización laravel 5.0

o

laravel 5.4 localización


Para la mayoría de las constantes utilizadas globalmente en la aplicación, es suficiente almacenarlas en archivos de configuración. También es bastante simple.

Cree un nuevo archivo en el directorio app/config . Llamémoslo constants.php

Allí debe devolver una matriz de valores de configuración.

return [ ''langs'' => [ ''es'' => ''www.domain.es'', ''en'' => ''www.domain.us'' // etc ] ];

Y puedes acceder a ellos de la siguiente manera

Config::get(''constants.langs''); // or if you want a specific one Config::get(''constants.langs.en'');

Y también puedes configurarlos

Config::set(''foo.bar'', ''test'');

Tenga en cuenta que los valores que establezca no persistirán. Solo están disponibles para la solicitud actual.

Actualizar

La configuración probablemente no sea el lugar adecuado para almacenar la información generada desde la base de datos. Podrías usar un modelo elocuente como:

class Category extends Eloquent { // db table ''categories'' will be assumed }

Y consulta todas las categorías

Category::all();

Si todo el Modelo por alguna razón no funciona, puede comenzar a pensar en crear su propia clase y una fachada. O simplemente podría crear una clase con todas las variables y métodos estáticos y luego usarla sin las cosas de la fachada.


Para las constantes globales en Laravel 5, no me gusta llamar a Config para ellas. Los defino en el grupo Ruta de esta manera:

// global contants for all requests Route::group([''prefix'' => ''''], function() { define(''USER_ROLE_ADMIN'',''1''); define(''USER_ROLE_ACCOUNT'',''2''); });


Solo para agregar a la respuesta anterior, deberá incluir la clase de configuración antes de poder comenzar a usarla en Laravel 5.3

use Illuminate/Support/Facades/Config;


Para constantes

Cree el archivo constants.php en el directorio de configuración: -

define(''YOUR_DEFINED_CONST'', ''Your defined constant value!''); return [ ''your-returned-const'' => ''Your returned constant value!'' ];

Puedes usarlos como: -

echo YOUR_DEFINED_CONST . ''<br>''; echo config(''constants.your-returned-const'');

Para matrices estáticas

Cree el archivo static_arrays.php en el directorio de configuración: -

class StaticArray { public static $langs = [ ''es'' => ''www.domain.es'', ''en'' => ''www.domain.us'', ''uk'' => ''www.domain.uk'', ''br'' => ''www.domain.br'', ''it'' => ''www.domain.it'', ''de'' => ''www.domain.de'', ''fr'' => ''www.domain.fr'' ]; }

Puedes usarlo como: -

echo StaticArray::$langs[''en''];

Nota: Laravel incluye todos los archivos de configuración automáticamente, por lo que no es necesario incluir el manual :)