Где я могу использовать псевдонимы Laravel Facade?

Я создал приложение Laravel 5.4 с пользовательским фасадом App\Facades\Repo. Фасад Repo проксирует класс RepositoryFactory. В конфигурации моего приложения у меня есть псевдоним Repo, который указывает на фасад репо. Я использую его для получения репозиториев с такими вызовами, как Repo::get('User').

Это отлично работает, если я нахожусь в контроллере или в файле маршрутов. Однако в других частях приложения я не могу использовать псевдоним Repo. Интерпретатор ищет класс Repo в текущем пространстве имен и выдает ошибки. Это вызывает два вопроса:

  • Какие классы знают о псевдонимах фасада? Что их определяет?
  • В классах, которые не знают о псевдонимах фасадов, следует ли мне идти дальше и импортировать сам класс фасада? Или это запах кода?

Например, классы, которые не поддерживают псевдонимы, включают сами мои репозитории. Я создал для них супертип, но они не наследуются ни от одного класса Laravel. Иногда моим репозиториям нужно обращаться к другим репозиториям для выполнения своей работы.


person DatsunBing    schedule 14.08.2017    source источник


Ответы (1)


Что я заметил до сих пор (работая с Laravel 5.2), так это то, что когда вы находитесь внутри контекста пространства имен, вам нужно либо иметь use Repo;, либо перед фасадом косая черта, например \Repo::get("User").

Вне контекста пространства имен, например, в routes.php, файлах конфигурации или представлениях, фасад работает напрямую.

Но это больше связано с тем, как работает PHP, чем с самим Laravel.

person Thiago Barcala    schedule 15.08.2017