2010-06-08 4 views
1

sfDoctrineGuard 플러그인을 사용하면 자동으로 백엔드 관리 기능이 생성되어 시스템 사용자를 편집하고 권한을 할당 할 수 있습니다.Symfony sfDoctrineGuard plugin 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로 설정하는 것이 발견 : lib 디렉토리/양식/교리/sfDoctrineGuardPlugin/기본/BasesfGuardUserForm :

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

코드는이 파일의 일부입니다. class.php. 나는이 파일 (sfDoctrineGuard를 다시 설치해야하는 경우 변경 사항을 덮어 쓸 가능성이 있음)을 편집해야한다고 생각하지 않지만 작동하도록 다른 방법을 생각할 수는 없습니다.

<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> 

은 내가 지금해야하는 것은 자신의 접두사에 따라 권한을 분할 다음과 같이

생성 된 HTML이다. 내가 권한 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 캐시 폴더에서 볼 수 있습니다.

어떻게하면됩니까?

sfWidgetFormDoctrineChoice와 동일한 클래스를 확장하는 자체 sfWidgetFormDoctrineChoicePermission 클래스를 작성하기 시작했지만 원하는 출력을 위해 올바르게 렌더링 기능을 편집하는 데 어려움을 겪고 있습니다. 이 작업에 대한 올바른 방법입니까?

또한 편집 사용자 페이지 (위와 동일)에 sfGuardUserProfile 모델을 통합해야합니다. sfGuardUser 플러그인 모듈의 generator.yml 파일을 편집하고 단순히 sfGuardUserProfile 테이블에서 필드 이름을 추가하면 somwhere를 읽을 수 있습니다. 그것은 작동하지만 슬프게도 그렇지 않습니다.

답변

1

먼저 기본 클래스를 편집하지 마십시오. 편집하고자하는 사람은 다음과 같습니다

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

lib 디렉토리/양식/교리/sfDoctrineGuardPlugin/sfGuardUserForm.class.php

여기에서

당신이 호출하여 기본 위젯을 대체 할 수 있습니다

자신 만의 위젯을 만들어야하며 sfWidgetFormDoctrineChoice에서이를 위임하는 것이 가장 좋습니다. 기본적으로 그것은 반향을 얻을 PHP 문자열로 HTML을 반환합니다. 결국 머리를 감추는 것은 간단합니다.구문이 잘못 그렇게 될 수 있도록 마지막 호출 내 머리 위로 떨어져있다

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

그건 : 같은 sfGuardUserForm 클래스에서, 주 사용자가 매우 간단 형성 편집 할 때

프로필 양식을 포함하려면 그것을 확인하고, 물론 당신의 프로필 관계의 이름과 관계를 대체하십시오.

0

우선, (프론트 엔드) 일반 사용자가 아닌 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) 
))); 

행운을 빕니다 :)

:

그런 다음 configure() 방법은 새로운 위젯 선언을해야합니다

관련 문제