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() функция ищет в массиве определенное значение.