Motive 1
Некоторые пакеты должны.
Обычно вы будете видеть ServiceProviders, используя его таким образом:
$this->app['db']
Или внутри крышки связывания:
$this->app->bindShared('anything', function($app)
{
return new DatabaseClass($app['db']->connection());
});
Поскольку $app
является собственностью Illuminate\Support\ServiceProvider
и ServiceProviders ребята, которые загрузиться которые будут использоваться Фасадами в вашем приложении.
Итак, первый Laravel инстанцирование и загрузить все ServiceProviders который обеспечивает IoC переплетены услуги, например:
$this->app->bindShared('db', function($app)
{
return new DatabaseManager($app, $app['db.factory']);
});
И после этого конкретного вызова у вас есть доступ к фасаду:
DB::table(...);
До этого вы получаете ошибку, сообщающую вам, что нет привязки «db».
И я должен подчеркнуть, что вы будете в основном видеть, что используется на ServiceProviders того пути, поскольку закрытие обеспечивает переменную $app
использовать его таким образом:
$app['db']->connection()...
Конечно любой человек может получить, что IoC связывания для приложения и установить его в $app
вар ...
Мотив 2
Некоторые другие могут злоупотребить, что не нарушать их пакеты без труда. Опираясь на псевдоним, чтобы сделать работу вашего пакета опасным, потому что если пользователь изменит этот псевдоним, пакет может сломаться. Это может быть проблемой пользователя, но это создало бы для них некоторые проблемы, например проблемы Github.
Антонио Карлос Рибейро, вы бы использовали Fascades при создании пакета или использовали бы приложение $? Как в контроллерах и командах? – searsaw
При создании пакета я бы использовал $ app в ServiceProvider, и я бы также создал для него Facade. Фасады - это фантастический и прекрасный способ облегчить доступ к вашему пакету, но они просто ярлык, поэтому пользователям не нужно создавать их все время. –