我正在创建一个需要通过API与远程(内部)服务进行通信的Laravel应用程序。
每个会话至少需要对此API进行一次身份验证,之后其他调用可以正常运行。
我认为最好的方法是使用Laravel的服务提供商来做到这一点,但我对其他解决方案持开放态度。
我希望能够随时使用此服务。如果我可以避免,我不想将服务放在控制器方法的参数中。像这样:
use MyServiceProvider;
class SomeController extends Controller
{
public function someMethod ()
{
MyServiceProvider::method();
}
}
如果需要的话,我可以发布我迄今为止所做的事情 - 但我更关注做我想要的事情而不是修复我做错了什么
inb4:我确实阅读了文档。
答案 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();
}
}