有什么办法以某种方式预处理控制器数据。我将从会话中获取参数,验证它并将其指定为控制器属性,并将其用作$ this-> myVar内部某些控制器的操作或其中所有控制器(如果可能)。使用控制器的构造函数没有给我任何东西,我无法访问请求和会话数据。谢谢!
UPD: 谢谢,jkucharovic,非常好的解决方案。 还有一个更脏的解决方案,没有注入:setContainer()方法,在$ controller = new Controller()之后直接调用;
use Symfony\Component\DependencyInjection\ContainerAwareInterface,
Symfony\Component\DependencyInjection\ContainerInterface;
class AppServiceController extends Controller {
private $my_property;
/**
* Used as constructor
*/
public function setContainer(ContainerInterface $container = null)
{
parent::setContainer($container);
$this->my_property = 'foo';
// your controller code
}
}
答案 0 :(得分:4)
我不确定你不想做什么是非常有用的。每次调用控制器时都会创建一个Controller实例。每次呼叫控制器时,会话和请求都会有所不同。
我认为您应该使用快捷方式创建一个BaseController
类扩展Controller
类,以便在会话中访问您的MyVar值。
class BaseController extends Controller
{
public function getMyVar()
{
return $this->get('session')->get('MyVarSessionKey');
}
}
所有其他控制器都将从此BaseController
扩展。
要获取请求,只需使用Controller
类Controller::getRequest()
提供的快捷方式。
答案 1 :(得分:1)
如果您想在__construct
方法中使用服务,则必须先inject that services。然后你可以在任何其他方法之前使用它们。例如:
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session;
public function __construct(Request $request, Session $session)
{
…
}