php codeigniter global-variables laravel-5.4

php - Laravel establece la variable global para todos los ayudantes, controladores y modelos personalizados



codeigniter global-variables (4)

Alguna vez hice esta pregunta en codeigniter, ahora quiero preguntar sobre esto en laravel.

Quiero establecer una variable global para helpers, modelos y controladores personalizados. La variable se obtiene del resultado de la base de datos.

Aquí está el ejemplo:

no sé dónde poner la variable

$data= DB::table(''categories'')->where(''id'', ''2'')->first(); $this->product_var = $data->product; **//main global variable**

ayudante personalizado

function test() { if($this->product_var=="product name") { } }

mi controlador

function index() { echo $this->product_var; }

mi modelo

function get_data() { echo $this->product_var; }

Como puede ver mis scripts arriba, $this->product_var casi se usa para custom helper , my controller y my model . en codeigniter creamos Globals.php en la carpeta de bibliotecas, o simplemente ponemos la variable en los controladores centrales. ¿Dónde debería establecer la variable global?


Como @Mozammil mencionó:

La idea es usar las "configuraciones de Laravel". Esto le permite mantener los valores en alcance global para un ciclo de solicitud.

Puede acceder a estos valores a través de la aplicación utilizando el ayudante config() de Laravel.

Solo tiene que configurarlo una vez como:

config([''app.product_data'' => $data]);

Y, esto estará disponible para usted en todo el mundo en la aplicación simplemente use config(''app.product_data'') para acceder a los datos.

Me gusta:

En ayuda personalizada

function test() { if(config(''app.product_data'')->product_var=="product name") { //do something } }

Su controlador

function index() { echo config(''app.product_data'')->product_var; }

Tu modelo

function get_data() { return config(''app.product_data'')->product_var; }

Espero que esto ayude.


Hace poco respondí una question según la cual el autor tenía una forma muy agradable de almacenar en caché globalmente los valores.

La idea es que él estaba buscando valores de tabla (también lo almacenaba en caché) y creó un ServiceProvider Configuración para poder acceder a él como una variable de configuración más adelante.

Quizás esto te funcione muy bien también.


La configuración no es una buena manera de mantener una variable global. Como el marco sugiere que config solo debe contener la configuración para su proyecto. Y deberían ser independientes de la solicitud.

Laravel proporciona una forma mucho mejor de manejar variables globales, puede usar Singletons. ¿Por qué? Debido a que un singleton se aferra a la aplicación a un nivel más profundo, puede ser llamado y disponible en parte de la solicitud. Una vez declarado que es bastante difícil cambiar singleton en el medio de la solicitud.

Puede poner este código en Your AppServiceProvider o puede crear su propio ProductVarServiceProvider.

App::singleton(''product_var'', function(){ return DB::table(''categories'')->where(''id'', ''2'')->first(); });

De esta forma, podemos estar seguros del origen de product_var . Más tarde puede usar la app(''product_var'') función auxiliar app(''product_var'') en cualquier parte de su código.

Debe tener cuidado al declarar variables globales.


Another simplest way to manage multiple data at same time. <?php namespace App/Utilities; class DataBus { private static $data = []; public static function setData($key, $value) { self::$data[$key] = $value; } public static function getData($key) { if(isset(self::$data[$key])) { return self::$data[$key]; } throw new /Exception("key is not set"); } }

Úselo así

<?php namespace App/Xyz; use App/Utilities/DataBus; class ABC{ function setData() { $data= DB::table(''categories'')->where(''id'', ''2'')->first(); DataBus::setData(''product_var'', $data->product); // get data by below syntax anywhere in application after setting data. DataBus::getData(''product_var''); } }