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

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

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

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от jakayla , 2 года назад

@magali 

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

  1. Создайте базовую модель, например, BaseModel, в директории appModels:
1
2
3
4
5
6
7
8
namespace AppModels;

use IlluminateDatabaseEloquentModel;

class BaseModel extends Model
{
    public static $globalVariable = 'value';
}


  1. Теперь вы можете использовать эту переменную в любой модели, наследующей BaseModel:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
namespace AppModels;

class User extends BaseModel
{
    public function someMethod()
    {
        $globalVar = self::$globalVariable;
        // используйте переменную здесь
    }
}


  1. Если вы хотите изменить значение глобальной переменной, вы можете сделать это из любой модели, наследующей BaseModel:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
namespace AppModels;

class SomeOtherModel extends BaseModel
{
    public function someMethod()
    {
        self::$globalVariable = 'new value';
        // глобальная переменная изменилась для всех моделей
    }
}


Теперь вы можете использовать BaseModel::$globalVariable в любой модели, наследующей BaseModel. Помните, что глобальные переменные могут быть не лучшим решением, если вы хотите сделать что-то более сложное, в таком случае может быть лучше использовать конфигурационные файлы или сервис-провайдеры.

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

от linnea , 10 месяцев назад

@magali 

Дополнительно, в Laravel 5 и выше, рекомендуется использовать Singleton класс или Facade для создания глобальной переменной, так как это позволяет более гибко управлять доступом к переменной и может быть проще для поддержки.


Для создания глобальной переменной с использованием Singleton класса, создайте новый класс, например, GlobalVariable, в директории app:


1 2 3 4 5 6 7 8 9 10 11


namespace App;


class GlobalVariable { private static $instance; public $variable = 'value';

1
2
3
4
5
6
7
8
public static function getInstance()
{
    if (self::$instance === null) {
        self::$instance = new self();
    }

    return self::$instance;
}


}


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


1


$globalVar = app(GlobalVariable::class)->variable;


Изменить значение глобальной переменной вы можете так:


1


app(GlobalVariable::class)->variable = 'new value';


Теперь вы можете использовать app(GlobalVariable::class)->variable в любой модели, контроллере или представлении, чтобы получить доступ к глобальной переменной.