是否可以在 symfony 1.4 的过滤器中检索用户信息?
我知道在一个动作中我可以调用
$this->getUser()
在我使用的模板中
$sf_user
但是我怎么能在过滤器中做呢?
是否可以在 symfony 1.4 的过滤器中检索用户信息?
我知道在一个动作中我可以调用
$this->getUser()
在我使用的模板中
$sf_user
但是我怎么能在过滤器中做呢?
好习惯:
在行动:
$this->formFilter= new YourFormFilter(array(), array('user' => $this->getUser()));
并在您的表单过滤器类中:
class YourFormFilter extends BaseYourFormFilter{
public function configure(){
$user = $this->getOption('user')
}
}
不良做法:
在您的表单过滤器类中:
class YourFormFilter extends BaseYourFormFilter{
public function configure(){
$user = sfContext::getInstance()->getUser();
}
}
您应该向过滤器添加一个用户选项并通过它传递用户对象。
在过滤器类中:
public function configure()
{
$this->user = $this->getOption('user');
if (!$this->user instanceof sfBasicSecurityUser)
{
throw new InvalidArgumentException('A user object is required as "user" option in ' . __METHOD__);
}
//...
}
在一个动作中:
$this->filter = new YourFilter(array(), array('user' => $this->getUser()));
如果您使用的是管理员生成器,则可以通过覆盖getFilterFormOptions
生成器配置类的方法来传递用户。
class yourGeneratorConfiguration extends BaseYourGeneratorConfiguration
{
/**
* @return sfBasicSecurityUser
*/
public function getUser()
{
return sfContext::getInstance()->getUser();
}
public function getFilterFormOptions()
{
return array('user' => $this->getUser());
}
// ...
}