Symfony sfDoctrineGuard插件sfGuardUser模块

时间:2010-06-08 15:21:54

标签: php symfony1 sfguard sfdoctrineguard

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

所以我访问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>

我更喜欢的是复选框列表。所以我四处搜索,发现如果我将选项“expanded”设置为true,则代码如下:

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

代码是此文件的一部分:lib / form / doctrine / sfDoctrineGuardPlugin / base / 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表中的字段名称就可以了工作,但遗憾的是没有。

2 个答案:

答案 0 :(得分:1)

首先,不要编辑基类。您要编辑的是:

  

LIB /形式/教义/ sfDoctrineGuardPlugin / sfGuardUserForm.class.php

从这里,您可以通过调用:

覆盖默认小部件
$this->setWidget('permissions_list', new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardPermission', 'expanded' => true)));

你应该创建自己的小部件并从sfWidgetFormDoctrineChoice扩展它是最好的开始。基本上它会返回html作为php字符串,它将得到回应。这很简单,最终可以解决问题。

要在编辑主要用户表单时包含您的个人资料表单,这在同一个sfGuardUserForm类中非常简单:

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

最后一个电话是我的头脑,所以语法可能是错误的,所以检查出来,当然也用你的个人资料关系的名称替换关系。

答案 1 :(得分:0)

首先,您必须将新的configure()置于UserAdmin格式(后端),而不是普通用户(前端)。

然后,您的configure()方法将具有新的窗口小部件声明:

$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)
)));
祝你好运:)