Учебники

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 () ищет в массиве конкретное значение.