Как компонент Symfony / Http-Foundation обрабатывает запросы и ответы Http - PullRequest
1 голос
/ 10 июня 2019

Я был назначен на проект, который должен включать компоненты Symfony для реорганизации его бизнес-логики. Однако я запутался, посмотрев документ Symfony HTTP-Foundation. Надеюсь, что кто-то здесь может помочь мне объяснить, как этот компонент работает с запросами и ответами пользователей Http.

В основном то, что я делал в проекте:

  1. при наличии страницы PHP создается объект запроса с URL-адресом и методом запросов

  2. Использование ApiRouter для направления кода на нужный контроллер

  3. Внутри контроллера он отправит HTTP-запрос на сервер и преобразует ответы в виде объекта Symfony Response на основе URL-адреса запроса.

location.php

class GetLocation
{
public function __construct($q)
   {
    $request = Request::create('location?v=full&q=' . 
    urlencode($q), 'GET'); //simulates a request using the url
    $rest_api = new RestApi();  //passing the request to api router
    $rest_api->apiRouter($request);
    }
}

ApiRouter.php

    //location router
       $location_route = new Route(
            '/location',
            ['controller' => 'LocationController']
        );
       $api_routes->add('location_route', $location_route);

    //Init RequestContext object
    $context = new RequestContext();
    //generate the context from user passed $request
    $context->fromRequest($request);

    // Init UrlMatcher object matches the url path with router
    // Find the current route and returns an array of attributes
    $matcher = new UrlMatcher($api_routes, $context);
    try {
        $parameters = $matcher->match($request->getPathInfo());
        extract($parameters, EXTR_SKIP);
        ob_start();

        $response = new Response(ob_get_clean());
    } catch (ResourceNotFoundException $exception) {
        $response = new Response('Not Found', 404);
    } catch (Exception $exception) {
        $response = new Response('An error occurred', 500);
    }

То, что я надеюсь узнать, является ли мое понимание правильным относительно логики или нет? И что означает метод Request: createFromGlobal, каковы различия между этим и Request: create (URL)

Пожалуйста, дайте мне знать, если мой вопрос должен быть более конкретным.

1 Ответ

0 голосов
/ 10 июня 2019

Сначала самые простые ваши вопросы:

Request::createFromGlobals() создаст запрос на основе некоторых глобальных переменных PHP, например, $_SERVER, $_GET и $_POST, что означает, что он создаст запрос из текущего запроса, в котором мы «находимся», то есть пользовательский запрос, вызвавший наше приложение. Request::create(), с другой стороны, создаст «новый» запрос без применения этого контекста, что означает, что вы должны передать определенную информацию, например, путь и HTTP-метод самостоятельно.

Теперь о вашем коде и о том, будет ли он работать. Краткий ответ, вероятно, нет. В GetLocation вы создаете как новый запрос, так и новый маршрутизатор, а внутри контроллера вы создаете маршрут, который затем будет добавлен к маршрутизатору. Это означает, что если код контроллера не выполняется перед GetLocation, маршрут не будет доступен в маршрутизаторе, то есть контроллер никогда не вызывается.

Возможно, вы захотите взглянуть на серию: Создайте свой собственный PHP Framework внутри документации Symfony, особенно части, начиная с Компонент HttpFoundation и далее. Надеюсь, это прояснит для вас.

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