2010-02-17 13:55:05 +00:00
|
|
|
<?php
|
|
|
|
|
2010-07-09 09:05:26 +01:00
|
|
|
namespace Symfony\Bundle\FrameworkBundle;
|
2010-02-17 13:55:05 +00:00
|
|
|
|
|
|
|
use Symfony\Components\DependencyInjection\ContainerInterface;
|
2010-07-09 08:26:22 +01:00
|
|
|
use Symfony\Components\HttpFoundation\Request;
|
|
|
|
use Symfony\Components\HttpFoundation\Response;
|
2010-05-13 16:17:33 +01:00
|
|
|
use Symfony\Components\HttpKernel\HttpKernelInterface;
|
2010-02-17 13:55:05 +00:00
|
|
|
|
|
|
|
/*
|
2010-04-07 01:51:29 +01:00
|
|
|
* This file is part of the Symfony framework.
|
2010-02-17 13:55:05 +00:00
|
|
|
*
|
|
|
|
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
|
|
|
*
|
|
|
|
* This source file is subject to the MIT license that is bundled
|
|
|
|
* with this source code in the file LICENSE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
2010-07-09 09:05:26 +01:00
|
|
|
* FrameworkBundle Controller gives you convenient access to all commonly needed services.
|
2010-02-17 13:55:05 +00:00
|
|
|
*
|
2010-04-07 01:51:29 +01:00
|
|
|
* @package Symfony
|
2010-07-09 09:27:29 +01:00
|
|
|
* @subpackage Bundle_FrameworkBundle
|
2010-02-17 13:55:05 +00:00
|
|
|
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
|
|
|
*/
|
|
|
|
class Controller
|
|
|
|
{
|
2010-05-06 12:25:53 +01:00
|
|
|
protected $container;
|
|
|
|
protected $request;
|
2010-02-17 13:55:05 +00:00
|
|
|
|
2010-05-06 12:25:53 +01:00
|
|
|
function __construct(ContainerInterface $container)
|
|
|
|
{
|
|
|
|
$this->container = $container;
|
|
|
|
}
|
2010-02-17 13:55:05 +00:00
|
|
|
|
2010-05-06 12:25:53 +01:00
|
|
|
public function getRequest()
|
2010-05-03 10:17:02 +01:00
|
|
|
{
|
2010-05-07 15:09:11 +01:00
|
|
|
if (null === $this->request) {
|
2010-05-06 12:25:53 +01:00
|
|
|
$this->request = $this->container->getRequestService();
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this->request;
|
2010-05-03 10:17:02 +01:00
|
|
|
}
|
|
|
|
|
2010-05-06 12:25:53 +01:00
|
|
|
public function setRequest(Request $request)
|
2010-02-17 13:55:05 +00:00
|
|
|
{
|
2010-05-06 12:25:53 +01:00
|
|
|
return $this->request = $request;
|
2010-02-17 13:55:05 +00:00
|
|
|
}
|
|
|
|
|
2010-05-06 12:25:53 +01:00
|
|
|
public function createResponse($content = '', $status = 200, array $headers = array())
|
|
|
|
{
|
|
|
|
$response = $this->container->getResponseService();
|
|
|
|
$response->setContent($content);
|
|
|
|
$response->setStatusCode($status);
|
2010-05-07 15:09:11 +01:00
|
|
|
foreach ($headers as $name => $value) {
|
2010-05-06 12:25:53 +01:00
|
|
|
$response->headers->set($name, $value);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $response;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generates a URL from the given parameters.
|
|
|
|
*
|
|
|
|
* @param string $name The name of the route
|
|
|
|
* @param array $parameters An array of parameters
|
|
|
|
* @param Boolean $absolute Whether to generate an absolute URL
|
|
|
|
*
|
|
|
|
* @return string The generated URL
|
|
|
|
*/
|
|
|
|
public function generateUrl($route, array $parameters = array(), $absolute = false)
|
|
|
|
{
|
2010-05-25 14:47:25 +01:00
|
|
|
return $this->container->getRouterService()->generate($route, $parameters, $absolute);
|
2010-05-06 12:25:53 +01:00
|
|
|
}
|
|
|
|
|
2010-05-13 07:29:04 +01:00
|
|
|
/**
|
|
|
|
* Forwards the request to another controller.
|
|
|
|
*
|
|
|
|
* @param string $controller The controller name (a string like BlogBundle:Post:index)
|
|
|
|
* @param array $path An array of path parameters
|
|
|
|
* @param array $query An array of query parameters
|
|
|
|
*
|
|
|
|
* @return Response A Response instance
|
|
|
|
*/
|
2010-05-13 07:15:37 +01:00
|
|
|
public function forward($controller, array $path = array(), array $query = array())
|
2010-05-06 12:25:53 +01:00
|
|
|
{
|
2010-05-13 07:29:04 +01:00
|
|
|
$path['_controller'] = $controller;
|
|
|
|
$subRequest = $this->getRequest()->duplicate($query, null, $path);
|
|
|
|
|
2010-05-13 16:17:33 +01:00
|
|
|
return $this->container->getKernelService()->handle($subRequest, HttpKernelInterface::FORWARDED_REQUEST, true);
|
2010-05-06 12:25:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sends an HTTP redirect response
|
|
|
|
*/
|
|
|
|
public function redirect($url, $status = 302)
|
|
|
|
{
|
|
|
|
$response = $this->container->getResponseService();
|
|
|
|
$response->setStatusCode($status);
|
|
|
|
$response->headers->set('Location', $url);
|
|
|
|
|
|
|
|
return $response;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function renderView($view, array $parameters = array())
|
|
|
|
{
|
|
|
|
return $this->container->getTemplatingService()->render($view, $parameters);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Renders a view.
|
|
|
|
*
|
|
|
|
* @param string $view The view name
|
|
|
|
* @param array $parameters An array of parameters to pass to the view
|
|
|
|
* @param Response $response A response instance
|
|
|
|
*
|
|
|
|
* @return Response A Response instance
|
|
|
|
*/
|
|
|
|
public function render($view, array $parameters = array(), Response $response = null)
|
|
|
|
{
|
2010-05-07 15:09:11 +01:00
|
|
|
if (null === $response) {
|
2010-05-06 12:25:53 +01:00
|
|
|
$response = $this->container->getResponseService();
|
|
|
|
}
|
|
|
|
|
|
|
|
$response->setContent($this->container->getTemplatingService()->render($view, $parameters));
|
|
|
|
|
|
|
|
return $response;
|
|
|
|
}
|
2010-02-17 13:55:05 +00:00
|
|
|
}
|