我正在尝试通过另一种方法扩展Laravel的Auth Guard类,因此我可以在最后调用Auth::myCustomMethod()

在文档部分Extending The Framework之后,我将继续介绍如何确切地执行此操作,因为Guard类本身没有自己的IoC binding我可以覆盖它。

这是一些代码,展示了我正在尝试做的事情:

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别名,但是我不确定这是否真的是解决此问题的最佳方法。

顺便说一句:我正在使用Laravel 4.1。

最佳答案

我将创建自己的UserProvider服务,其中包含所需的方法,然后扩展Auth。

我建议创建您自己的服务提供商,或者直接在其中一个起始文件(例如start/global.php)中扩展Auth类。

Auth::extend('nonDescriptAuth', function()
{
    return new Guard(
        new NonDescriptUserProvider(),
        App::make('session.store')
    );
});

这是一个很好的tutorial you can follow to get a better understanding

您可以使用另一种方法。它将涉及扩展当前的提供商之一,例如Eloquent。
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 - 如何扩展Laravel的Auth Guard类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20701322/

10-15 19:23