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!
}
[...]
我正在尝试更好地了解服务容器在 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!
}
[...]