Внедрение зависимостей в контроллерах Laravel

133
20 февраля 2021, 00:00

Код для примера

Контроллер:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Product;
class TestController extends Controller
{
    public function index(Request $request, Product $product, $id)
    {
        dd(
            $request->all(),
            $product->findOrFail($id),
            $id
        );
    }
}

Маршрут:

Route::get('test/{id}', 'TestController@index');

Вызов метода:

app()->call([new App\Http\Controllers\TestController, 'index'], ['id' => 1]);

$id берется с строки запроса, тут понятно. Но как в фреймворке работает внедрение зависимостей в метод. Откуда приложение знает что мне нужно передать объект класса Request и Product? Как это работает в Laravel и как реализовать такой функционал на чистом PHP?

Answer 1

Использует паттерн внедрения зависмостей, берется из контейнера

Используется ReflectionClass для определения параметров

Контейнер Классы иницилизации контейнера

READ ALSO
Не отрабатывает сравнение по времени в MySQL через PHP

Не отрабатывает сравнение по времени в MySQL через PHP

Я все равно получаю запись, хотя время end_at уже вышлоЕсли заменить Carbon::now('Europe/Moscow') на NOW(), тот же результат

134
Рекурсивное вычитание (PHP)

Рекурсивное вычитание (PHP)

Есть функция с рекурсивным вычитаниемНа каждой рекурсии появляется промежуточный ответ (0, 1, 1 и 2)

168
Командная разработка сайтов [закрыт]

Командная разработка сайтов [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме

136
JPA + Postgres Refcursor return error

JPA + Postgres Refcursor return error

Пытаюсь получить курсор из процедуры, но почему-то получаю ошибку

195