2014-12-07 3 views
1

У меня есть фасад (в данном случае одноплодной) и зарегистрировать его с помощью 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.

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

ответ

2

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

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

    public function __construct() { ... } 

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

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

+0

Да, я тоже так думал. То, что мне тогда не нравится, это то, что я должен был бы назвать его функцией, а не переменной (т. Е. «Facility :: getModelNotFound()», а не «Facility :: $ ModelNotFound» или любым другим именем). Что вы порекомендуете? – Kousha

+0

Вы не сможете обойти вызов функции с классом Фарада Ларавеля. Однако, как я уже говорил. Вы можете написать свой собственный. Дайте мне немного времени ... Я собираюсь написать один и обновить ответ. – lukasgeiter

+0

Ouh well ... Я думал, что это возможно с чем-то вроде '__getStatic()', но, видимо, нет такой вещи. Вы должны работать с методами или вообще без фасада:/ – lukasgeiter

Смежные вопросы