Controller中如何解析Service Provider?

How to resolve Service Provider in Controller?

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

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

所有 resolve() 辅助方法所做的就是调用 app() 辅助方法。您可以继续使用 app() 辅助方法来解决容器外的依赖关系。

$ldap = app('ldap');

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

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

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

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

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

    [...]