Los forwards se utilizan para realizar "redirecciones internas", ya que simplemente delegan la ejecución de la aplicación en un controlador diferente al asociado originalmente con la ruta.
Este proceso es interno, por lo que no interviene el navegador del usuario y por tanto, es totalmente transparente al usuario (al contrario que las redirecciones). Técnicamente Silex utiliza una subpetición para hacer el forward:
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernelInterface;
$app->get('/', function () use ($app) {
// forward al controlador asociado con /hello
$subRequest = Request::create('/hello', 'GET');
return $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
});
Truco Si utilizas el proveedor UrlGeneratorProvider
, también puedes generar la URL a partir del nombre de la ruta:
$request = Request::create($app['url_generator']->generate('hello'), 'GET');
Los forwards requieren algo más de trabajo, ya que normalmente tendrás que enviar también a la subpetición las cookies, la sesión y los parámetros del servidor de la petición original.