Symfony - controladores

O controlador é responsável por lidar com cada solicitação que chega ao aplicativo Symfony. O controlador lê uma informação da solicitação. Em seguida, cria e retorna um objeto de resposta ao cliente.

De acordo com o Symfony, DefaultController classe está localizada em “src/AppBundle/Controller”. É definido como segue.

DefaultController.php

<?php 
namespace AppBundle\Controller; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Response;  

class DefaultController extends Controller {  
}

Aqui o HttpFoundation componente define uma camada orientada a objetos para a especificação HTTP, e o FrameworkBundle contém a maior parte da funcionalidade "base" da estrutura.

Solicitar objeto

A classe Request é uma representação orientada a objetos da mensagem de solicitação HTTP.

Criação de um objeto de solicitação

A solicitação pode ser criada usando createFromGlobals() método.

use Symfony\Component\HttpFoundation\Request; 
$request = Request::createFromGlobals();

Você pode simular uma solicitação usando Globals. Em vez de criar uma solicitação com base nos globais do PHP, você também pode simular uma solicitação.

$request = Request::create( 
   '/student', 
   'GET', 
   array('name' => 'student1') 
);

Aqui o create() método cria uma solicitação com base em um URI, um método e alguns parâmetros.

Substituindo um objeto de solicitação

Você pode substituir as variáveis ​​globais do PHP usando o overrideGlobals()método. É definido como segue.

$request->overrideGlobals();

Acessando um objeto de solicitação

A solicitação de uma página da web pode ser acessada em um controlador (método de ação) usando getRequest() método do controlador de base.

$request = $this->getRequest();

Identificando um objeto de solicitação

Se você quiser identificar uma solicitação em seu aplicativo, “PathInfo"método retornará a identidade única do URL da solicitação. É definido como segue.

$request->getPathInfo();

Objeto de Resposta

O único requisito para um controlador é retornar um objeto Response. Um objeto Response contém todas as informações de uma determinada solicitação e as envia de volta ao cliente.

A seguir está um exemplo simples.

Exemplo

use Symfony\Component\HttpFoundation\Response; 
$response = new Response(‘Default'.$name, 10);

Você pode definir o objeto Response em JSON da seguinte maneira.

$response = new Response(json_encode(array('name' => $name))); 
$response->headers->set('Content-Type', 'application/json');

Construtor de Resposta

O construtor contém três argumentos -

  • O conteúdo da resposta
  • O código de status
  • Uma matriz de cabeçalhos HTTP

A seguir está a sintaxe básica.

use Symfony\Component\HttpFoundation\Response;  
$response = new Response( 
   'Content', 
   Response::HTTP_OK, 
   array('content-type' => 'text/html') 
);

Por exemplo, você pode passar o argumento de conteúdo como,

$response->setContent(’Student details’);

Da mesma forma, você pode passar outros argumentos também.

Enviando resposta

Você pode enviar uma resposta ao cliente usando o send()método. É definido como segue.

$response->send();

Para redirecionar o cliente para outro URL, você pode usar o RedirectResponse classe.

É definido como segue.

use Symfony\Component\HttpFoundation\RedirectResponse;  
$response = new RedirectResponse('http://tutorialspoint.com/');

FrontController

Um único arquivo PHP que lida com todas as solicitações recebidas em seu aplicativo. O FrontController executa o roteamento de diferentes URLs para diferentes partes internas do aplicativo.

A seguir está a sintaxe básica do 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();

Aqui o in_array() função pesquisa um array para um valor específico.