У меня есть фасад (в данном случае одноплодной) и зарегистрировать его с помощью ServiceProvider
:Использовать статические переменные в Laravel Фасадов
Service Provider
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
.
Что я делаю неправильно?
Да, я тоже так думал. То, что мне тогда не нравится, это то, что я должен был бы назвать его функцией, а не переменной (т. Е. «Facility :: getModelNotFound()», а не «Facility :: $ ModelNotFound» или любым другим именем). Что вы порекомендуете? – Kousha
Вы не сможете обойти вызов функции с классом Фарада Ларавеля. Однако, как я уже говорил. Вы можете написать свой собственный. Дайте мне немного времени ... Я собираюсь написать один и обновить ответ. – lukasgeiter
Ouh well ... Я думал, что это возможно с чем-то вроде '__getStatic()', но, видимо, нет такой вещи. Вы должны работать с методами или вообще без фасада:/ – lukasgeiter