2016-09-20 28 views
1

我试图更好地理解服务容器如何在Laravel中工作。所以我知道服务已经有了你想使用的Laravel设置的东西,对吧?如何解决控制器中的服务提供者?

我想使用LDAP内置函数做一个简单的例子。我有这个在我的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连接?

+0

我想你要使用'$ this-> app-> make',你需要将ldap添加到你的服务提供者配置文件'config/app.php'中。 https://laravel.com/docs/5.3/providers – bassxzero

+0

但不是这块代码已经注册服务提供商? AppServicePRovider默认已加载,不是吗? –

+0

该方法用于注册与应用程序实例的绑定,它要求您已经有服务提供者的实例。没有看代码就很难解释。简而言之,当Laravel在引导期间为您创建服务提供商时,但您必须告诉它要创建哪些服务提供商。 – bassxzero

回答

2

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

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

$ldap = app('ldap'); 

如果您喜欢该方法,还可以使用App外观。

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

你将只能使用$this->app->make()从您的控制器如果你已经注入其中的ldap结合是注册的Application容器对象。

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

    [...] 
相关问题