0

是否可以在 symfony 1.4 的过滤器中检索用户信息?

我知道在一个动作中我可以调用

$this->getUser()

在我使用的模板中

$sf_user

但是我怎么能在过滤器中做呢?

4

2 回答 2

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();
  }
}
于 2012-09-14T09:33:54.000 回答
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()));

如果您使用的是管理员生成器,则可以通过覆盖getFilterFormOptions生成器配置类的方法来传递用户。

class yourGeneratorConfiguration extends BaseYourGeneratorConfiguration
{
  /**
   * @return sfBasicSecurityUser
   */
  public function getUser()
  {
    return sfContext::getInstance()->getUser();
  }

  public function getFilterFormOptions()
  {
    return array('user' => $this->getUser());
  }

  // ...
}
于 2012-09-14T09:40:55.080 回答