Symfony - Контроллеры
Контроллер отвечает за обработку каждого запроса, поступающего в приложение Symfony. Контроллер считывает информацию из запроса. Затем создает и возвращает клиенту объект ответа.
Согласно Symfony, DefaultController класс находится по адресу “src/AppBundle/Controller”. Это определяется следующим образом.
DefaultController.php
<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class DefaultController extends Controller {
}
Здесь HttpFoundation компонент определяет объектно-ориентированный уровень для спецификации HTTP, а FrameworkBundle содержит большую часть «базовой» функциональности фреймворка.
Объект запроса
Класс Request - это объектно-ориентированное представление сообщения HTTP-запроса.
Создание объекта запроса
Запрос можно создать с помощью createFromGlobals() метод.
use Symfony\Component\HttpFoundation\Request;
$request = Request::createFromGlobals();
Вы можете смоделировать запрос с помощью Globals. Вместо создания запроса на основе глобальных переменных PHP вы также можете имитировать запрос.
$request = Request::create(
'/student',
'GET',
array('name' => 'student1')
);
Здесь create() Метод создает запрос на основе URI, метода и некоторых параметров.
Переопределение объекта запроса
Вы можете переопределить глобальные переменные PHP, используя overrideGlobals()метод. Это определяется следующим образом.
$request->overrideGlobals();
Доступ к объекту запроса
Доступ к запросу веб-страницы можно получить в контроллере (метод действия) с помощью getRequest() метод базового контроллера.
$request = $this->getRequest();
Идентификация объекта запроса
Если вы хотите идентифицировать запрос в своем приложении, “PathInfo"метод вернет уникальный идентификатор URL-адреса запроса. Это определяется следующим образом.
$request->getPathInfo();
Объект ответа
Единственное требование к контроллеру - вернуть объект Response. Объект Response содержит всю информацию из данного запроса и отправляет ее обратно клиенту.
Ниже приводится простой пример.
пример
use Symfony\Component\HttpFoundation\Response;
$response = new Response(‘Default'.$name, 10);
Вы можете определить объект Response в JSON следующим образом.
$response = new Response(json_encode(array('name' => $name)));
$response->headers->set('Content-Type', 'application/json');
Конструктор ответа
Конструктор содержит три аргумента -
- Содержание ответа
- Код состояния
- Массив заголовков HTTP
Ниже приводится основной синтаксис.
use Symfony\Component\HttpFoundation\Response;
$response = new Response(
'Content',
Response::HTTP_OK,
array('content-type' => 'text/html')
);
Например, вы можете передать аргумент содержимого как,
$response->setContent(’Student details’);
Точно так же вы можете передавать и другие аргументы.
Отправка ответа
Вы можете отправить ответ клиенту, используя send()метод. Это определяется следующим образом.
$response->send();
Чтобы перенаправить клиента на другой URL-адрес, вы можете использовать RedirectResponse класс.
Это определяется следующим образом.
use Symfony\Component\HttpFoundation\RedirectResponse;
$response = new RedirectResponse('http://tutorialspoint.com/');
FrontController
Единый файл PHP, который обрабатывает каждый запрос, поступающий в ваше приложение. FrontController выполняет маршрутизацию разных URL-адресов к внутренним разным частям приложения.
Ниже приводится основной синтаксис FrontController.
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
$request = Request::createFromGlobals();
$path = $request->getPathInfo(); // the URI path being requested
if (in_array($path, array('', '/'))) {
$response = new Response(’Student home page.');
} elseif (‘/about’ === $path) {
$response = new Response(’Student details page’);
} else {
$response = new Response('Page not found.', Response::HTTP_NOT_FOUND);
}
$response->send();
Здесь in_array() функция ищет в массиве определенное значение.