Как работает передача сервиса в метод?

Рейтинг: 1Ответов: 1Опубликовано: 14.02.2023

Ниже пример рабочего кода, для получения значений, переданных методом POST.

Тут 2 варианта - Request::createFromGlobals() и index1(Request $request): Response.

В Request::createFromGlobals() я вижу явный вызов статического метода.

А в index1(Request $request): Response я вижу передачу объекта в метод, но я не вижу вызова метода с аргументом. Например $index1_instance=new index1('объект Request');

Мы просто создали метод с аргументом. Ничего явно туда не передали, но внутри работаем так, как будто передали объект типа Request.

Говорят, это называется передача сервиса в метод. Как это работает? Где и что вызывает метод?

<?php
namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request; // Пространство имен для получения данных методами GET и POST.


class TestController extends AbstractController
{
  #[Route('/test', name: 'home_page')]
  public function index(): Response
  {
    // Получаем ссылку на объект запроса/метода GET/POST/PUT/DELETE.
    $request = Request::createFromGlobals();

    // Пример получения данных с именем post_data, переданных методом POST.
    $postData = $request->request->get('post_data');
  }

  // Получаем $request из сервиса. 
  #[Route('/test1', name: 'home_page')]
  public function index1(Request $request): Response
  {
    // Пример получения данных с именем post_data, переданных методом POST.
    $postData = $request->request->get('post_data');
  }
}

Ответы

▲ 0

Фреймворк использует свою систему роутинга и маршрутизации, на основе MVC, где в роутах вы указываете контроллер и метод, а фреймворк в свою очередь наполняет Request данными и отправляет его туда, когда вы указали в роутах