Внедрение автоматической зависимости Laravel работает только в том случае, если объекты создаются из контейнера IOC.Когда маршрут разрешается действием Controller, Laravel делает это через контейнер.Поэтому, если в методе Controller есть какие-либо зависимости, они разрешаются автоматически.Но если вы вызываете метод напрямую, например $object->method()
, зависимости не разрешаются автоматически.
Так что в вашем случае вы не можете выполнить $this->store()
.Но вы можете сделать это следующим образом ->
$container = \Illuminate\Container\Container::getInstance();
$container->call([$this, 'store'], []); //$container->call([$object, 'method'], [args]);
Это также верно для других пользовательских классов.Если эти классы разрешаются через контейнер Laravel, их зависимости конструктора разрешаются автоматически.
Пример:
class MyClass
{
private $dependency;
public function __construct(AnotherClass $dependency)
{
$this->dependency = $dependency;
}
}
Затем вы можете получить экземпляр объекта MyClass
через контейнер, какthis ->
$instance = $container->make(MyClass::class);
Контейнер автоматически создаст экземпляр AnotherClass
.Это равно:
$instance = new MyClass(new AnotherClass());
Если у AnotherClass
есть зависимости, контейнер будет их рекурсивно создавать.
Пример взят из: source