Symfony - Controladores
El controlador es responsable de manejar cada solicitud que llega a la aplicación Symfony. El controlador lee una información de la solicitud. Luego, crea y devuelve un objeto de respuesta al cliente.
Según Symfony, DefaultController la clase está ubicada en “src/AppBundle/Controller”. Se define como sigue.
DefaultController.php
<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class DefaultController extends Controller {
}
Aquí el HttpFoundation El componente define una capa orientada a objetos para la especificación HTTP, y el FrameworkBundle contiene la mayor parte de la funcionalidad del marco "base".
Solicitar objeto
La clase Request es una representación orientada a objetos del mensaje de solicitud HTTP.
Crear un objeto de solicitud
La solicitud se puede crear usando createFromGlobals() método.
use Symfony\Component\HttpFoundation\Request;
$request = Request::createFromGlobals();
Puede simular una solicitud utilizando Globals. En lugar de crear una solicitud basada en los globales de PHP, también puede simular una solicitud.
$request = Request::create(
'/student',
'GET',
array('name' => 'student1')
);
Aquí el create() El método crea una solicitud basada en un URI, un método y algunos parámetros.
Anular un objeto de solicitud
Puede anular las variables globales de PHP utilizando el overrideGlobals()método. Se define como sigue.
$request->overrideGlobals();
Acceder a un objeto de solicitud
Se puede acceder a la solicitud de una página web en un controlador (método de acción) usando getRequest() método del controlador base.
$request = $this->getRequest();
Identificación de un objeto de solicitud
Si desea identificar una solicitud en su aplicación, “PathInfo"El método devolverá la identidad única de la URL de solicitud. Se define como sigue.
$request->getPathInfo();
Objeto de respuesta
El único requisito para un controlador es devolver un objeto de respuesta. Un objeto de respuesta contiene toda la información de una solicitud determinada y la envía de vuelta al cliente.
A continuación se muestra un ejemplo sencillo.
Ejemplo
use Symfony\Component\HttpFoundation\Response;
$response = new Response(‘Default'.$name, 10);
Puede definir el objeto Respuesta en JSON de la siguiente manera.
$response = new Response(json_encode(array('name' => $name)));
$response->headers->set('Content-Type', 'application/json');
Constructor de respuestas
El constructor contiene tres argumentos:
- El contenido de la respuesta
- El código de estado
- Una matriz de encabezados HTTP
A continuación se muestra la sintaxis básica.
use Symfony\Component\HttpFoundation\Response;
$response = new Response(
'Content',
Response::HTTP_OK,
array('content-type' => 'text/html')
);
Por ejemplo, puede pasar el argumento de contenido como,
$response->setContent(’Student details’);
Del mismo modo, también puede pasar otros argumentos.
Enviando respuesta
Puede enviar una respuesta al cliente utilizando el send()método. Se define como sigue.
$response->send();
Para redirigir al cliente a otra URL, puede utilizar el RedirectResponse clase.
Se define como sigue.
use Symfony\Component\HttpFoundation\RedirectResponse;
$response = new RedirectResponse('http://tutorialspoint.com/');
FrontController
Un solo archivo PHP que maneja todas las solicitudes que ingresan a su aplicación. FrontController ejecuta el enrutamiento de diferentes URL a partes internas de la aplicación.
A continuación se muestra la sintaxis básica de 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();
Aquí el in_array() La función busca en una matriz un valor específico.