1

有没有办法以某种方式预处理控制器数据。我将从会话中获取参数,对其进行验证并将其分配为控制器属性,并将其用作 $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
 }
}
4

2 回答 2

4

我不确定你不想做的事情是否很有用。每次调用控制器时都会创建一个控制器实例。每次调用控制器时,会话和请求都会有所不同。

我认为您应该使用快捷方法创建一个BaseController类扩展Controller类,以在会话中访问您的 MyVar 值。

class BaseController extends Controller 
{
    public function getMyVar()
    {
        return $this->get('session')->get('MyVarSessionKey');
    }
}

您的所有其他 Controller 都将从 this 扩展BaseController

要获取请求,只需使用Controller类提供的快捷方式,Controller::getRequest().

于 2012-05-11T09:34:41.843 回答
1

如果要在__construct方法中使用服务,则必须先注入该服务。然后您可以在任何其他方法之前使用它们。例如:

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session;

public function __construct(Request $request, Session $session)
{
    …
}
于 2012-05-11T10:49:50.280 回答