如何在Controller中解析服务提供商?

时间:2016-09-20 22:08:53

标签: php laravel lumen lumen-5.3

我试图更好地了解Services Container在Laravel中的运作方式。所以我知道服务习惯用Laravel设置你想要使用的东西,对吗?

我试图使用LDAP php内置函数创建一个简单的示例。我在AppServiceProvider.php

中有这个
public function register()
{
    $this->app->bind('ldap', function() {
        $conn = ldap_connect(env('LDAP_HOST'));
        ldap_bind($conn, env('LDAP_BIND'), env('LDAP_PWD'));
        return $conn;
    });
}

然后在我的控制器中我尝试$ldap = resolve('ldap');但它没有工作,它说resolve不存在。我已经尝试了$this->app->make。我如何恢复LDAP连接?

2 个答案:

答案 0 :(得分:2)

在Laravel 5.3之前,未添加resolve()辅助方法。听起来你没有使用5.3。

无论如何,所有resolve()帮助器方法都会调用app()辅助方法。您可以继续使用app()帮助程序方法来解析容器外的依赖关系。

$ldap = app('ldap');

如果您更喜欢这种方法,也可以使用App外观。

$ldap = App::make('ldap');

如果您已注入$this->app->make()绑定已注册的Application容器对象,则您只能使用控制器中的ldap

答案 1 :(得分:0)

不是通过使用函数解析类,我通常更喜欢在任何参数之前在Controller构造函数或路由函数中注入它。

class Controller
{
    [...]

    public function __construct(Class $class)
    {
        $this->class = $class;
    }

    public function authenticate(Class $class)
    {
        $this->class->foo(); // I work!
        $class->foo();  // I work too, yay!
    }

    [...]