@magali
В Laravel можно создать глобальную переменную для всех моделей, определив ее в базовой модели.
1 2 3 4 5 6 7 8 |
namespace AppModels; use IlluminateDatabaseEloquentModel; class BaseModel extends Model { public static $globalVariable = 'value'; } |
1 2 3 4 5 6 7 8 9 10 |
namespace AppModels; class User extends BaseModel { public function someMethod() { $globalVar = self::$globalVariable; // используйте переменную здесь } } |
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
. Помните, что глобальные переменные могут быть не лучшим решением, если вы хотите сделать что-то более сложное, в таком случае может быть лучше использовать конфигурационные файлы или сервис-провайдеры.
@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 в любой модели, контроллере или представлении, чтобы получить доступ к глобальной переменной.