Используйте статические переменные в фасадах Laravel

У меня есть Фасад (в данном случае синглтон), и я регистрирую его, используя ServiceProvider:

Поставщик услуг

use App;

class FacilityServiceProvider extends ServiceProvider
{

public function register()
{
$this->app->singleton('Facility', function(){
return new Facility();
});

// Shortcut so developers don't need to add an Alias in app/config/app.php
$this->app->booting(function()
{
$loader = \Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('Facility', 'CLG\Facility\Facades\FacilityFacade');
});
}
}

Фасад

use Illuminate\Support\Facades\Facade;

class FacilityFacade extends Facade {

/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor() { return 'Facility'; }
}

Теперь я хочу иметь статические переменные внутри Facility учебный класс:

Facility.php

class Facility
{
public static $MODEL_NOT_FOUND = '-1';

public function __construct() { ... }
}

но когда я использую Facility::$MODEL_NOT_FOUND, Я получил Access to undeclared static property,

Что я делаю неправильно?

1

Решение

Это потому, что класс Facade только «перенаправляет» вызовы методов в базовый класс. Таким образом, вы не можете получить доступ к свойствам напрямую. Самое простое решение — использовать метод получения.

class Facility
{
public static $MODEL_NOT_FOUND = '-1';

public function __construct() { ... }

public function getModelNotFound(){
return self::$MODEL_NOT_FOUND;
}
}

Альтернативой было бы написать свой собственный класс Facade, который простирается от Illuminate\Support\Facades\Facade и использовать магические методы получить доступ к свойствам напрямую

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]