2010-06-08 98 views
1

当使用sfDoctrineGuard插件时,它会自动生成后端管理功能,我可以在其中编辑系统用户并为其分配权限。Symfony sfDoctrineGuard插件sfGuardUser模块

因此,我访问http://.../backend_dev.php/sf_guard_user/:id/edit,其中提供了用户信息,包括可供选择的权限。

默认权限都显示为一个多选框,HTML如下:

<select name="sf_guard_user[permissions_list][]" multiple="multiple" id="sf_guard_user_permissions_list"> 
    <option value="1">Permission1</option> 
    <option value="2">Permission2</option> 
    <option value="3">Permission3</option> 
    <option value="4">Permission4</option> 
</select> 

我宁愿是一个复选框列表。所以,我搜索了一圈,发现如果我添加“扩展”选项设置为true,下面的代码:

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

的代码是这个文件的一部分:LIB /表格/教义/ sfDoctrineGuardPlugin /基/ BasesfGuardUserForm。 class.php。我不认为我应该编辑这个文件(如果sfDoctrineGuard被重新安装,潜在的改变被覆盖),但想不到另一种方式使它工作。

生成的HTML如下:

<ul class="checkbox_list"> 
<li><input name="sf_guard_user[permissions_list][]" type="checkbox" value="1" id="sf_guard_user_permissions_list_1" />&nbsp;<label for="sf_guard_user_permissions_list_1">Permission1</label></li> 
<li><input name="sf_guard_user[permissions_list][]" type="checkbox" value="2" id="sf_guard_user_permissions_list_2" />&nbsp;<label for="sf_guard_user_permissions_list_2">Permission2</label></li> 
<li><input name="sf_guard_user[permissions_list][]" type="checkbox" value="3" id="sf_guard_user_permissions_list_3" />&nbsp;<label for="sf_guard_user_permissions_list_3">Permission3</label></li> 
<li><input name="sf_guard_user[permissions_list][]" type="checkbox" value="4" id="sf_guard_user_permissions_list_4" />&nbsp;<label for="sf_guard_user_permissions_list_4">Permission4</label></li> 
</ul> 

我现在需要做的是分裂根据自己的前缀的权限。例如,如果我有权限命名user_action1,user_action2,file_action1,file_action2,他们会显示一个类似:

User 
checkbox (custom label) Action One 
checkbox     Action Two 

File 
checkbox (custom label) Action One 
checkbox     Action Two 

,但不知道从哪里开始与此有关。如果有一个模板可以编辑,那很容易,但由于我正在处理Forms框架,因此我的理解是模板是即时生成的 - 我可以在我的symonfy缓存文件夹中看到它们。

我该怎么办?

我开始编写自己的sfWidgetFormDoctrineChoicePermission类,该类扩展了与sfWidgetFormDoctrineChoice相同的类,但我正努力为所需的输出正确编辑渲染函数。这是完成这项工作的正确方法吗?

我还需要将我的sfGuardUserProfile模型集成到编辑用户页面(与上面相同),我读somwhere编辑sfGuardUser插件模块的generator.yml文件,并简单地添加sfGuardUserProfile表中的字段名称将使它的工作,但可悲的是它没有。

回答

1

首先不要编辑基类。你想要编辑的一个是:

$this->setWidget('permissions_list', new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardPermission', 'expanded' => true))); 

的lib /表格/教义/ sfDoctrineGuardPlugin/sfGuardUserForm.class.php

从这里,你可以通过调用覆盖默认小部件

您应该创建自己的小部件,并从sfWidgetFormDoctrineChoice中放出它是最好的开始。基本上它会返回HTML作为PHP字符串,将得到回应。这足以让你的头脑最终得到满足。

$this->embedForm('profile', new sfGuardUserProfileForm($this->getObject->NAME_OF_PROFILE_RELATIONSHIP)); 

这最后一次通话是把我的头顶部,这样的语法可能是错误的这样:

要在编辑时,您的用户主要形式,它是非常简单的,在同一sfGuardUserForm类包括您的个人资料表格检查出来,当然也用你的个人资料关系的名字替换关系。

0

首先,您必须将新的configure()UserAdmin的形式(后端),而不是来自(前端)的常规用户。

然后,你configure()方法将有新的widget声明:

$this->setWidget('permission_list', new sfWidgetFormDoctrineChoice(array(
'muliple' => true, // this makes checkboxes (default=false=radio) 
'model' => sfGuardPermission, 
'expanded' => true // changes from select menu -> radio or check (based on 'multiple' setting) 
))); 

祝你好运:)