Как разрешить поставщика услуг в контроллере?

Я пытаюсь лучше понять, как работает контейнер служб в Laravel. Итак, я знаю, что Сервисы используются для того, чтобы вы что-то хотели использовать, настроенные Laravel, верно?

Я пытаюсь сделать простой пример, используя встроенные функции php 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?

1

Решение

resolve() вспомогательный метод не был добавлен до Laravel 5.3. Похоже, вы не используете 5.3.

Все resolve() вспомогательный метод делает это вызов app() во всяком случае, вспомогательный метод. Вы можете продолжать использовать app() вспомогательный метод для разрешения зависимостей из контейнера.

$ldap = app('ldap');

Вы также можете использовать App фасад, если вы предпочитаете этот метод.

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

Вы сможете использовать только $this->app->make() от вашего контроллера, если вы ввели Application контейнерный объект, в котором ваш ldap привязка была зарегистрирована.

2

Другие решения

Вместо того, чтобы разрешать класс с помощью функции, я обычно предпочитаю вводить его в конструктор контроллера или в функцию маршрута перед любыми параметрами.

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

[...]
0

По вопросам рекламы [email protected]