2012-01-27 2 views
0

플러그인 이름이 'Admin'이고 내 메소드가 index, add 등입니다. 고유 한 모델 이름과 컨트롤러 이름 (ACL 구현 용)을 적용하고자하므로 모든 컨트롤러와 플러그인 이름이있는 모델 (cakephp plugin model/controller cache issue with main model/controller 참조). 그 후, 임씨는 다음과 같은 문제에 직면했다. 사용자라는 테이블이 있는데 cakephp2.0을 사용하고 있습니다.Cakephp Plugin 모델 이름 접두사

1) domain.com/admin/admin_users/index 또는 admin/content/admin_index를 사용하여 URL에 액세스해야합니다. 대신 admin/users/index 또는 admin/content/index를 통해 액세스하고 싶습니다. 어떻게 모든 경로에 적용될 수 있도록 일반적인 경로로이 경로를 설정합니까?

2)보기에는 정의되지 않은 색인 사용자 (이전에보기를 구웠습니다)가 표시됩니다. AdminUser로 모든 것이 올 것입니다. public $ alias = 'User'로 설정하면이 문제가 해결되었습니다. 이 올바른지 ?

3) 컨트롤러에서 "$ this-> User-> some var/fn"을 $ this-> AdminUser-> some var/function으로 변경해야합니다. 이 문제를 해결할 방법이 있습니까?

플러그인 이름을 admin으로 지정하는 데 문제가 있습니다 (관리자 라우팅을 설정하지 않았습니다)?

답변

2

안전하게 플러그인 이름을 admin으로 지정할 수 있습니다. 이는 예약어가 아닙니다. 그러나 모델/컨트롤러 이름을 구문 분석 할 때 Cake는 플러그인 이름을 고려하지 않으므로 실제로는 AdminUsersControllerAdminUser이 일부 추상 AdminUser에 속하는 클래스로 간주됩니다. 따라서 Cake 매직만을 사용하여 모든 문제를 해결하려면 실제로 User와 UsersController라는 이름을 지정해야하며이 이름이 충돌하지 않기를 바랍니다. the cookbook

2) Yups, 당신이 경우에 어떻게 컨트롤러를 별명에

1) 경로 구성 예 중 하나입니다 :이 옵션이없는 경우, 당신은이 일을 해결하기 위해 자신의 마법의 일부를 제공 할 수 있습니다 "사용자"를 키로 사용하고 싶습니다.

3) $uses 변수가 앨리어싱을 지원하지 않기 때문에 Cake 매직만을 사용하지 않습니다. 그러나 AdminUsersController에서 다음과 같은 방법으로 2.0의 새로운 지연로드를 이용할 수 있습니다.

<?php 
public function __get($name) { 
    // Note, the isset triggers lazy-loading. Check out Controller::__isset() 
    // if you want to see how that works. 
    if ($name == 'User' && isset($this->AdminUser)) { 
     // Assign to admin user here to bypass the next time 
     return ($this->User = $this->AdminUser); 
    } 

    // Delegate to CakePHP's magic getter 
    return parent::__get($name); 
} 
+0

답장을 보내 주셔서 감사합니다. 첫 번째 쿼리에 대한 솔루션이 필요합니다. 나는 많은 노력을했지만 아무런 해결책도 얻지 못했습니다. – binoy

+1

컨트롤러에 별칭을 지정하는 방법을 의미합니까? 내 대답에 라우트 구성 URL을 체크 아웃 한 경우 페이지에서 "별칭"을 검색하면 그 예가 있습니다. AdminUserController에 대해 원하는 결과를 얻으려면'/ admin/users/: action/*'을'array ('controller'=> 'admin_users', 'plugin'=> 'admin')'에 매핑 할 수있다. admin 플러그인의 모든 컨트롤러에 대해 자동으로 수행하려면 커스텀 라우트 클래스를 사용해야 할 것입니다. –