当使用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" /> <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" /> <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" /> <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" /> <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表中的字段名称将使它的工作,但可悲的是它没有。