2012-05-02 2 views
1

저는 CakePHP를 기반으로 구축 된 여러 개의 작은 웹 사이트를 관리하기위한 간단한 CMS를 만들었습니다. 플러그인을 1.3에서 2.0으로 성공적으로 마이그레이션 한 후 Cake를 최신 버전 2.1.2로 업데이트 한 후 AuthComponent에 문제가 발생했습니다.AuthComponent에 대한 사용자 정의 테이블 정의

응용 프로그램이 대부분의 테이블을 플러그인과 공유하므로 클래스 이름 중복을 피하기 위해 플러그인의 클래스 이름 앞에는 모두 플러그인 이름이 접두사로 붙습니다. 따라서 메인 애플리케이션에 UsersController, 내 CMS 플러그인에 PluginNameUsersController (또는 PostsControllerPluginNamePostsController)이있는 경우가 있습니다. 플러그인 모델은 $useTable을 사용하여 올바른 데이터베이스 테이블을 찾습니다 (따라서 PluginNamePostsController은 여전히 ​​posts을 사용함). 2.1로 업그레이드 한 이후

. * 케이크 AuthComponent의 지점은 대신 users에 참조하는 존재하지 않는 pluginname_users 테이블을 예상대로 작동을 중단했다.

AuthComponent에 대한 사용자 정의 테이블을 정의 할 수 있습니까? 아니면 다른 방법으로이 기능을 사용할 수 있습니까? 또한이 동작이 예상됩니까?

public $components = array(
    'Session', 'RequestHandler', 
    'Auth'=> array(
     'loginAction' => array(
     'controller' => 'pluginname_users', 
     'action' => 'login', 
     'plugin' => 'pluginname' 
    ), 
     'loginRedirect' => array(
     'controller' => 'pluginname_posts', 
     'action' => 'index', 
     'plugin' => 'pluginname' 
    ), 
     'authenticate' => array(
     'Form' => array(
      'userModel' => 'PluginNameUser', 
      'fields' => array('username', 'password') 
     ) 
    ) 
    ) 
); 

답변

1

AuthComponent 테이블 등의 실제로 알지 못한다 다음과 같이

성분은 PluginNameAppController 구성된다. 사용자 정의 모델을 사용하면 다른 테이블에서 작동하도록 $table을 정의 할 수 있습니다. 그런 다음

class PluginNameUser extends PluginAppModel { 
    public $table = 'users'; 
} 

도트 구문을 사용하여 플러그인의 모델을 사용하도록 인증 방법 알려주기 : 그래서, 우선 적절한 테이블을 사용하는 플러그인의 모델을 설정하는 것입니다. FormAuthenticate가 인증을 시도 할 때

'authenticate' => array(
    'Form' => array(
    'userModel' => 'PluginName.PluginNameUser', 
    'fields' => array('username', 'password') 
    ) 
) 

지금, 그것은 시도하고 지금 PluginName에 알 모델을 사용하여 사용자를 찾을 수 있습니다. users 테이블을 사용하도록 설정 한 모델을로드하고 거기에있는 사용자를 찾습니다.

+0

사실,'PluginNameUser' 모델에서'$ table'을 정의하는 것은 필요하지 않은 것처럼 보입니다. 아마도 나는 더 큰 존재하지 않는 문제에 대해 눈이 멀어져서 아마도'userModel'의 접두어를 플러그인의 이름으로 무시했을 것입니다. 접두사'userModel'에 Auth가 다시 시작됩니다. 도와 주셔서 감사합니다! – mensch

관련 문제