Как сделать глобальную переменную для всех моделей в laravel?

Пользователь

от buster , в категории: PHP , год назад

Как сделать глобальную переменную для всех моделей в laravel?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от hobart.rath , год назад

@buster 

Чтобы создать глобальную переменную для всех моделей в Laravel, вы можете использовать фасады Laravel для доступа к глобальному хранилищу. Вот пример:

  1. Создайте новый сервис-провайдер с помощью команды artisan:
1
php artisan make:provider GlobalVariablesServiceProvider


  1. Откройте созданный файл в папке app/Providers и добавьте следующий код:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
namespace AppProviders;

use IlluminateSupportFacadesConfig;
use IlluminateSupportServiceProvider;

class GlobalVariablesServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        Config::set('app.global_var', 'your_global_variable_value');
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}


Обратите внимание на Config::set('app.global_var', 'your_global_variable_value'); - это устанавливает значение глобальной переменной в вашем файле конфигурации app.php.

  1. Зарегистрируйте свой ServiceProvider в файле config/app.php:
1
2
3
4
5
'providers' => [
    ...
    AppProvidersGlobalVariablesServiceProvider::class,
    ...
],


  1. Теперь вы можете получить доступ к глобальной переменной из любой модели с помощью фасада Config:
1
$configValue = Config::get('app.global_var');


Примечание: Если вы собираетесь изменять значение глобальной переменной во время выполнения приложения, используйте метод Config::set() вместо Config::get().

Пользователь

от jamey.kohler , 4 месяца назад

@buster 

Дополнительно к предыдущему ответу, также можно использовать методы свойств и методов в Eloquent моделях Laravel для доступа к глобальным переменным. Например, можно создать базовую модель и определить методы для доступа к глобальным переменным.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
namespace AppModels;

use IlluminateDatabaseEloquentModel;
use IlluminateSupportFacadesConfig;

class BaseModel extends Model
{
    protected function getGlobalVar()
    {
        return Config::get('app.global_var');
    }
    
    protected function setGlobalVar($value)
    {
        Config::set('app.global_var', $value);
    }
}


Затем передавайте эту базовую модель ваши другие модели, чтобы иметь доступ к методам для работы с глобальными переменными:

1
2
3
4
5
6
namespace AppModels;

class User extends BaseModel
{
    //
}


Теперь любая модель, унаследованная от BaseModel, может вызывать методы getGlobalVar() и setGlobalVar() для работы с глобальными переменными. Следует помнить, что это подход не будет хранить значение глобальных переменных на стороне сервера между запросами, и значение будет загружаться снова для каждого запроса.