Acabo de empezar a trabajar con Laravel. Necesito reescribir todo un sistema que hice hace algunos años, usando Laravel 4 como marco base. En mi antiguo sistema, solía tener un constant.php
archivo con algunas constantes declaradas y un globals.php
archivo 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 lugar 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ándolo como un servicio y creando para él una fachada:
aplicación / bibliotecas / Proyecto / Constants.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 así accedo a esa propiedad como PJ\Constants::$langs
.
Esto funciona, pero dudo que sea la forma más eficiente o correcta de hacerlo. Quiero decir, ¿es la forma correcta de "propagar" una variable mediante la creación de un proveedor de servicios completo y fachadas y todo eso? ¿O dónde debería poner estos datos?
Gracias por cualquier consejo.
EDITAR # 01
Los datos que quiero pasar a todos los controladores y las vistas se pueden configurar directamente en un script, como en el ejemplo al comienzo de mi publicación, pero también se pueden generar dinámicamente, desde una base de datos, por ejemplo. Estos datos pueden 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 /category/subcategory/product
), y también para analizar información en varios controladores (como obtener información de la categoría que contiene el producto X).
Mi matriz es algo 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 la información asociada con la categoría.
Necesito esta matriz, también, disponible en todos los controladores y vistas.
Entonces, ¿debería guardarlo como una variable de configuración? ¿De qué otra manera podría almacenar estos datos? ¿Cuál sería la mejor y semánticamente correcta forma?