Как расширить класс auth Guard Laravel?
Я пытаюсь расширить фреймворк Laravel по авт гвардии класс одним дополнительным методом, поэтому я могу вызвать Auth::myCustomMethod()
в конце.
после раздела документации Расширение Рамок я застрял на том, как именно это сделать, потому что у самого класса Guard нет собственного привязка МОК что я мог бы переопределить.
вот код, демонстрирующий, что я пытаюсь сделать:
namespace FoobarExtensionsAuth;
class Guard extends IlluminateAuthGuard {
public function myCustomMethod()
{
// ...
}
}
теперь, как я должен зарегистрируйте расширенный класс FoobarExtensionsAuthGuard
для использования вместо оригинала IlluminateAuthGuard
Так что я могу называть Auth::myCustomMethod()
так же, как, например,Auth::check()
?
одним из способов было бы заменить Auth
псевдоним в app/config/app.php
но я не уверен, если это действительно лучший способ решить эту.
кстати: я использую Laravel 4.1.
2 ответов
Я бы создал свой собственный сервис UserProvider, который содержит методы, которые я хочу, а затем расширить Auth.
я рекомендую создать свой собственный поставщик услуг или прямо расширить класс Auth в одном из файлов запуска (например. start/global.php
).
Auth::extend('nonDescriptAuth', function()
{
return new Guard(
new NonDescriptUserProvider(),
App::make('session.store')
);
});
это хорошо руководство вы можете следовать, чтобы получить лучшее понимание
есть еще один метод, который вы можете использовать. Это будет включать в себя расширение одного из нынешних поставщиков, таких как Красноречивый.
class MyProvider extends Illuminate\Auth\EloquentUserProvider {
public function myCustomMethod()
{
// Does something 'Authy'
}
}
тогда вы можете просто расширить auth, как указано выше, но с вашим настраиваемым поставщиком.
\Auth::extend('nonDescriptAuth', function()
{
return new \Illuminate\Auth\Guard(
new MyProvider(
new \Illuminate\Hashing\BcryptHasher,
\Config::get('auth.model')
),
\App::make('session.store')
);
});
после того, как вы внедрили код, вы измените драйвер в auth.php
файл конфигурации для использования 'nonDescriptAuth'.
единственный способ добавить (а также заменить существующие функции) - создать копию гвардии.в PHP файл в вашем проекте и в app / start / global.в PHP добавить:
require app_path().'/models/Guard.php';
конечно, это уродливый метод, но я потратил более часа, чтобы проверить все возможности [как изменить вещи, хранящиеся в сеансе Auth], и это всегда заканчивается ошибкой: ... _contruct класса HSGuard требует, чтобы первый параметр был "UserProviderInterface" и получал "EloquentUserProvider"...