2010-06-08 93 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) 
))); 

祝你好運:)