我已经安装了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,但我不明白为什么会阻止它工作。
有什么想法吗?
由于
答案 0 :(得分:2)
我相信编辑用户操作使用插件目录中的类sfGuardUserAdminForm
复制文件
插件/ sfDoctrineGuardPlugin / LIB /形式/教义/ sfGuardUserAdminForm.class.php
到
LIB /形式/教义/
然后将此行添加到configure()方法
$ this-> setWidget('permissions_list'=> new myCustomPermissionWidget());
您不需要添加对parent :: configure()的调用,在表单框架中执行此操作是不好的做法,只有在您知道需要时才应该这样做。
答案 1 :(得分:0)
尝试编辑
LIB /供应商/ symfony的/ LIB /插件/ sfDoctrineGuardPlugin / LIB /形式/教义/ 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']);
}
}
就这么简单。
希望有所帮助
路