如何在Laravel 5.2

时间:2016-02-24 22:04:44

标签: php laravel laravel-5

我正在创建一个需要通过API与远程(内部)服务进行通信的Laravel应用程序。

每个会话至少需要对此API进行一次身份验证,之后其他调用可以正常运行。

我认为最好的方法是使用Laravel的服务提供商来做到这一点,但我对其他解决方案持开放态度。

我想要的是什么:

我希望能够随时使用此服务。如果我可以避免,我不想将服务放在控制器方法的参数中。像这样:

use MyServiceProvider;

class SomeController extends Controller 
{
    public function someMethod ()
    {
        MyServiceProvider::method();
    }
}

如果需要的话,我可以发布我迄今为止所做的事情 - 但我更关注做我想要的事情而不是修复我做错了什么

inb4:我确实阅读了文档。

1 个答案:

答案 0 :(得分:2)

您要做的是创建一个Facade。外观非常类似于使用依赖注入,除了它们可以在没有特定注入的情况下全局使用。文档:https://laravel.com/docs/5.0/facades#creating-facades

在您的服务提供商中:

App::bind('foo', function()
{
    return new \MyServices\Foo; //returns a concrete class
});

Foo.php

use Illuminate\Support\Facades\Facade;

class Foo extends Facade {

    protected static function getFacadeAccessor() { return 'foo'; } //matches binding in SP

}

现在,您的服务提供商可以在任何地方Foo使用,即使没有明确注入它:

use Foo;

class SomeController extends Controller 
{
    public function someMethod ()
    {
        Foo::method(); //creates a Foo object according to App::bind, then calls method();
    }
}