Попробуйте внедрить AuthManager
в файл bootstrap/app.php
:
/*
|--------------------------------------------------------------------------
| Register Service Providers
|--------------------------------------------------------------------------
|
| Here we will register all of the application's service providers which
| are used to bind services into the container. Service providers are
| totally optional, so you are not required to uncomment this line.
|
*/
$app->register(App\Providers\AppServiceProvider::class);
$app->register(App\Providers\EventServiceProvider::class);
// Injecting goes here
$app->singleton(Illuminate\Auth\AuthManager::class, function ($app) {
return $app->make('auth');
});
Объяснение
Мы знаем, что Illuminate\Auth\AuthManager
будет разрешено автоматически, если мы запустим Illuminate\Auth\AuthServiceProvider
. Видеть:
Illuminate\Auth\AuthServiceProvider@registerAuthenticator
Таким образом, мы должны запустить этот поставщик услуг, прежде чем мы захотим использовать AuthManager
. Но Люмен немного отличается. Я вижу, что Illuminate\Auth\AuthManager
еще не зарегистрирован в:
Laravel\Lumen\Application::$availableBindings
Это хак, чтобы заставить Lumen работать быстрее, когда контейнер хочет разрешить ресурс, см.:
Laravel\Lumen\Application@make
Таким образом, в основном, если вы хотите разрешить класс Illuminate\Auth\AuthManager
и его зависимость, вы можете сначала зарегистрировать привязки его класса, прежде чем использовать его.
Обновлять
Мы знаем это
Laravel\Lumen\Application::$availableBindings
свойство находится в видимости public
, так что это тоже работает:
/*
|--------------------------------------------------------------------------
| Register Service Providers
|--------------------------------------------------------------------------
|
| Here we will register all of the application's service providers which
| are used to bind services into the container. Service providers are
| totally optional, so you are not required to uncomment this line.
|
*/
$app->register(App\Providers\AppServiceProvider::class);
$app->register(App\Providers\EventServiceProvider::class);
$app->availableBindings['Illuminate\Auth\AuthManager'] = 'registerAuthBindings';
$app->alias('auth', 'Illuminate\Auth\AuthManager');
Обновление 2
Я понимаю, что есть много проблем, если мы хотим реализовать аутентификацию JWT в Lumen с помощью этой библиотеки. Итак, я делаю загрузочное (чистый запуск) приложение Lumen, которое хорошо интегрируется с этой библиотекой. Пожалуйста, ознакомьтесь с моим репозиторием. Позже я добавлю объяснение того, какой из них и почему мы должны изменить код. Ваше здоровье.
07.03.2016