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.