1

我试图更好地理解服务容器在 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 连接?

4

2 回答 2

2

直到Laravel resolve()5.3 才添加辅助方法。听起来您没有使用5.3。

无论如何,resolve()辅助方法所做的只是调用辅助方法。app()您可以继续使用app()辅助方法来解决容器外的依赖关系。

$ldap = app('ldap');

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

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

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

于 2016-09-20T22:27:45.740 回答
1

我通常更喜欢在控制器构造函数或路由函数中,在任何参数之前将其注入,而不是通过使用函数来解析类。

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!
    }

    [...]
于 2016-09-21T22:23:00.957 回答