Я пытаюсь расширить класс Autar Guard от Laravel одним дополнительным методом, поэтому я могу вызвать Auth::myCustomMethod()
в конце.
После раздела документации « Расширение рамки» я зациклился на том, как это сделать, потому что сам класс Guard не имеет собственной привязки IoC, которую я мог бы переопределить.
Вот какой код демонстрирует то, что я пытаюсь сделать:
namespace Foobar\Extensions\Auth; class Guard extends \Illuminate\Auth\Guard { public function myCustomMethod() { // ... } }
Теперь, как я должен зарегистрировать расширенный класс Foobar\Extensions\Auth\Guard
который будет использоваться вместо исходного Illuminate\Auth\Guard
поэтому я могу вызвать Auth::myCustomMethod()
же, как, например, Auth::check()
?
Одним из способов было бы заменить псевдоним Auth
в app/config/app.php
но я не уверен, что это действительно лучший способ решить эту проблему.
BTW: Я использую Laravel 4.1.
Я бы создал свою собственную службу 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
конфигурации auth.php
чтобы использовать «nonDescriptAuth».
Единственный способ добавить (а также заменить существующие функции) – создать копию файла Guard.php в вашем проекте и в app / start / global.php добавить:
require app_path().'/models/Guard.php';
Конечно, это уродливый метод, но я потратил на час, чтобы проверить все возможности [как изменить вещи, хранящиеся в Session by Auth], и он всегда заканчивается ошибкой: … _contruct класса HSGuard требует, чтобы первый параметр был «UserProviderInterface» и получил «EloquentUserProvider» …