是否可以在symfony 1.4中的过滤器内检索用户信息?
我知道在一个动作中我可以打电话
$this->getUser()
在模板中我使用
$sf_user
但我怎么能在过滤器中做?
答案 0 :(得分:2)
良好做法:
行动中:
$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();
}
}
答案 1 :(得分:2)
您应该向过滤器添加用户选项,并通过该选项传递用户对象。
在过滤器类中:
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()));
如果您使用 admin generator ,则可以通过覆盖生成器配置类的getFilterFormOptions
方法来传递用户。
class yourGeneratorConfiguration extends BaseYourGeneratorConfiguration
{
/**
* @return sfBasicSecurityUser
*/
public function getUser()
{
return sfContext::getInstance()->getUser();
}
public function getFilterFormOptions()
{
return array('user' => $this->getUser());
}
// ...
}