Метод класса Laravel с отраженными параметрами - PullRequest
0 голосов
/ 12 октября 2018

Обычно я использую такие параметры:

public function test($parameter)
{
 echo 'Parameter value: ' . $parameter;
}

При взгляде на служебный контейнер laravel Я вижу этот код.

 public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }

В соответствии с документациейиспользует отражение. Но я не понимаю.

Я не знаю, как работает параметр UserRepository $users.Это псевдоним или что-то?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

В Laravel есть отличный сервисный контейнер, и он делает все инъекции зависимостей, поэтому вам не нужно передавать классу параметр, laravel сделает это за вас.

без контейнера вы должны передать этот параметр

class A {
public $foo;

public function __construct (Foo $foo){
   $this->foo
}

$classA = new A((new Foo))

Когда Laravel сталкивается с этими классами, он resolves их.

Также вы можете вручную определить эти классы, используя singleton() или bind() методы

$this->app->singleton('FooBar', function($app)
{
    return new FooBar($app['SomethingElse']);
});

Или вы можете использовать интерфейсы.Вы можете привязать реализованный класс к интерфейсу и laravel при встрече с этим интерфейсом, он разрешится по вашему желанию

$this->app->bind('App\ICacheManager', 'App\RedisManager');

public $redis;

public function __contruct(ICacheManager $redis){
  $this->redis = $redis;
}

, для дальнейшей проверки сервисный контейнер laravel

0 голосов
/ 12 октября 2018

Это называется указанием типа и используется для внедрения зависимостей в конструктор или для проверки правильности типа аргумента, передаваемого в функцию.Инъекция просто означает, что если класс вызывается с помощью метода make, Laravel автоматически предоставит экземпляр класса, требуемый вашим конструктором.

Например, если у вас есть функция public function something(string $something), она выдастошибка, если в эту функцию передается любой другой тип, кроме String, что гарантирует использование правильных данных.

Из документации laravel:

В качестве альтернативы и, что важно,вы можете «напечатать подсказку» зависимости в конструкторе класса, который разрешается контейнером, включая контроллеры, прослушиватели событий, задания очереди, промежуточное ПО и многое другое.На практике именно так большинство ваших объектов должно разрешаться контейнером.
Например, вы можете напечатать подсказку, определенную вашим приложением, в конструкторе контроллера.Хранилище будет автоматически разрешено и добавлено в класс:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...