Symfony1 限制symfony管理生成器编辑多选中显示的选项

Symfony1 限制symfony管理生成器编辑多选中显示的选项,symfony1,sfdoctrineguard,Symfony1,Sfdoctrineguard,我正在为sfGuardUser模块使用管理生成器。generator.yml文件的编辑部分如下所示: edit: title: Editing User "%%username%%" display: "User": [first_name, last_name, email_address, username, password, password_again] "Permissions and groups": [is_active, groups_list, si

我正在为sfGuardUser模块使用管理生成器。generator.yml文件的编辑部分如下所示:

edit:
  title: Editing User "%%username%%"
  display:
    "User":  [first_name, last_name, email_address, username, password, password_again]
    "Permissions and groups": [is_active, groups_list, sites_list]
现在,并不是每个用户都可以访问此表单,只有站点管理员允许站点管理员创建和更新自己的用户。用户和站点之间存在多对多关系。每个站点管理员也是一个用户,因此具有一组关联站点

我希望sites_列表不显示所有站点,而是仅显示站点管理员关联的站点,从而确保站点管理员无法将自己的用户之一放入管理员未关联的站点


在我看来,要做到这一点,我需要用其他东西替换站点列表,但我不知道在哪里以及如何进行此更改。

我认为唯一的方法是从自动生成的表单中更改站点列表小部件。例如,在您的情况下,您可以执行以下操作:

<!-- SitesTable -->
public function getByUser($userId){
     //create your query to find all sites from that user
      $userSites = $this->createQuery()->...
                        ->where('user_id = ?', $userId);

      //create the array
      $choices = array();
      foreach ( $userSites as $site ) {
          $choices[$site->getId()] = $site->getName();
      }

      return $choices;
}

<!-- sfGuardUserForm -->
class sfGuardUserForm extends BaseSfGuardUserForm{
    public function configure() {
      //unset the old sites_list
      unset($this['sites_list']);

      //obtain the user id (depends on how it's implemented, i'm not using sfGuard)
      $userId = sfContext::getInstance()->getUser()->getId(); 

      $choices = Doctrine::getTable('Sites')->getByUser($userId);

      //set the new widget filtered
      $this->setWidget('sites_list', new sfWidgetFormChoice(array('choices' => $choices)));
      $this->setValidator('sites_list', new sfValidatorChoice(array('choices' => array_keys($choices))));

}