У меня есть Фасад (в данном случае синглтон), и я регистрирую его, используя 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
,
Что я делаю неправильно?
Это потому, что класс 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
и использовать магические методы получить доступ к свойствам напрямую
Других решений пока нет …