2

我已经安装了sfDoctrineGuard插件。一切正常,我可以使用 /sf_guard_user/edit/:id 页面来编辑用户。

我不喜欢将权限列为选择列表的方式,我想将它们显示为根据权限名称拆分的单个复选框。为此,我创建了一个扩展的自定义小部件sfWidgetFormChoice。这也是我想要的方式,但我的问题如下:

为了使用我的自定义小部件,我在此文件中编辑了以下几行:

lib/form/doctrine/sfDoctrineGuardPlugin/base/BasesfGuardUserForm.class.php

前:

      'groups_list'      => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardGroup')),
      'permissions_list' => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardPermission')),

后:

      'groups_list'      => new sfWidgetFormDoctrineChoice(array('multiple' => true,     'model' => 'sfGuardGroup', 'expanded' => true)),
      'permissions_list' => new myCustomPermissionWidget(),

这给出了正确的结果。

问题是我不应该编辑 Base 类,因为任何时候我构建我的模型文件都会被覆盖。

所以我应该编辑这个文件:

lib/form/doctrine/sfDoctrineGuardPlugin/sfGuardUserForm.class.php

    class sfGuardUserForm extends PluginsfGuardUserForm
    {
      public function configure()
      {
        parent::configure();

        $this->setWidgets(array(
          'groups_list'      => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardGroup', 'expanded' => true)),
          'permissions_list' => new myCustomPermissionWidget(),
        ));
      }
    }

但这不起作用。我已经尝试了新函数 setup() 中的代码,在我的代码之前和之后使用 parent::setup(),但仍然没有。

PluginsfGuardUserForm 是抽象的并扩展了 BasesfGuardUserForm 但我不明白为什么这会阻止它工作。

有任何想法吗?

谢谢

4

2 回答 2

2

我相信编辑用户操作使用插件目录中的类 sfGuardUserAdminForm

复制文件

插件/sfDoctrineGuardPlugin/lib/form/doctrine/sfGuardUserAdminForm.class.php

进入

库/表格/教义/

然后将此行添加到 configure() 方法

$this->setWidget('permissions_list' => new myCustomPermissionWidget());

您不需要添加对 parent::configure() 的调用,在表单框架中执行此操作是不好的做法,只有在您知道需要时才应该这样做。

于 2010-07-02T19:44:57.783 回答
0

尝试编辑

lib/vendor/symfony/lib/plugins/sfDoctrineGuardPlugin/lib/form/doctrine/PluginsfGuardUserForm.class.php

“vendor”和“symfony”将是您在安装时拥有的任何内容。当我想从登录表单中删除记住我复选框时,这对我有用:

<?php

/**
 * sfGuardFormSignin for sfGuardAuth signin action
 *
 * @package    sfDoctrineGuardPlugin
 * @subpackage form
 * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
 * @version    SVN: $Id: sfGuardFormSignin.class.php 23536 2009-11-02 21:41:21Z Kris.Wallsmith $
 */
class sfGuardFormSignin extends BasesfGuardFormSignin
{
  /**
   * @see sfForm
   */
  public function configure()
  {
    $this->widgetSchema->setFormFormatterName('list');
    unset($this['remember']);
  }
}

就这么简单。

希望能帮助到你

卢克

于 2010-07-02T13:48:11.517 回答