2017-11-16 1 views
0

나는 Cakephp 3 애플리케이션을 가지고 있으며이 플러그인과 그 아래에 이벤트 접두어를 관리자 접두사로로드하려고합니다. (전체 프로젝트가 아님).cakephp3 특별 접두어 용 플러그인을로드

어떻게해야합니까?

이 내

설정/bootstrap.php 내가이 플러그인을로드

.

... 

Plugin::load('Josegonzalez/Upload'); 

\Cake\Event\EventManager::instance()->on(new \App\Controller\Event\AppEventListener()); 

내가이 만 줄 당신은 조건부로 내부 boostrap.php 라우팅 을 기반으로 코드를 실행할 수 없습니다

답변

1

관리자 접두사 실행하려면 (I는 파일의 끝 부분이로드) 앱의 라우팅 구성이 아직로드되지 않았습니다.

오래된 학교 스타일을 사용하고 $_SERVER['REQUEST_URI']을 사용해야합니다.

$url = $_SERVER['REQUEST_URI']; 
$admin = '/admin/'; 
if(substr($url, 0, strlen($admin)) === $admin) { 
    Plugin::load('Josegonzalez/Upload'); 
    \Cake\Event\EventManager::instance()->on(new \App\Controller\Event\AppEventListener()); 
} 

업데이트

귀하의 플러그인은 그 자체 부트 스트랩 파일이 있어야합니다. 어떤

업로드/설정/bootstrap.php 포함 플러그인을로드 할 때

\Cake\Event\EventManager::instance()->on(new \App\Controller\Event\AppEventListener()); 

응용의 부트 스트랩은 다음 CakePHP의 부트 스트랩을 포함하도록 지시합니다.

앱/설정/bootstrap.php :

Plugin::load('Josegonzalez/Upload', ['bootstrap' => true]); 

당신은 조건부 플러그인을로드하지 않아야합니다.

나는 플러그인 요청에 대한 인증을 찾고 있다고 생각합니다. 플러그인의 사용을 허가 된 관리자에게만 제한하려고합니다. 그건 플러그인 문제가 아닙니다. 이는 인증 문제이며 플러그인의 인증 구성 요소를 사용하여 요청이 유효한지, 그리고 현재 사용자가 관리자인지 확인해야합니다.

+0

감사, 이벤트 리스너를 들어

Router::scope('/', function ($routes) { // Connect other routes. $routes->scope('/admin', function ($routes) { $routes->loadPlugin('Josegonzalez/Upload'); }); }); 

을 플러그인 부트 스트랩 구성 내부를로드 할 수 있습니다. 거기에 내가 어디 에서이 이벤트 수신기 (이 할 수있는 cakephp의 도구를 사용할 수 있습니다? 그것은 $ _SERVER (이 이벤트는 "Model.initialize"btw를 사용하여)를 사용하는 나쁜 관행을 느낀다 – hamidreza

+0

아니요. 이 플러그인에 대한 인증이 필요합니다. 내 응용 프로그램은 2 부분으로 구성되어 있습니다. 첫 번째는 admin 웹 패널이고 두 번째는 일반 사용자를위한 웹 사이트입니다. 관리자 패널에서 사진을 업로드해야하지만 사이트 홈 페이지 (플러그인 업로드)가 필요하지 않습니다. 내가 관리 접두사에 대한이 플러그인을로드하고 싶습니다. 그리고 eventListener (내 사용자 정의 타임 스탬프와 같은 .....) 관리 패널에 대한로드하는 데 필요한 행동을 처리하고 있습니다. 그것은 정말 관리에 대한 액세스 아니에요 모델은 관리자 접두사 인 경우에만 (내 모델은 관리자 및 기본 사이트에 동일하므로) – hamidreza

1

인용 CakePHP의 플러그인 문서 https://book.cakephp.org/3.0/en/plugins.html#plugin-routes

당신은 또한 응용 프로그램의 경로 목록에서 플러그인 경로를로드 할 수 있습니다. 이렇게하면 플러그인 경로가로드되는 방식을보다 잘 제어 할 수 있으며 추가 범위 또는 접두사에서 플러그인 경로를 감쌀 수 있습니다.

그래서 당신은

// inside plugin bootstra.php 
    \Cake\Event\EventManager::instance()->on(new 
    \App\Controller\Event\AppEventListener()); 
+0

대단히 고마워요. 내가 어떻게 그걸 놓쳤는지 모르겠다는 의사 부부를 읽었습니다. 이벤트 수신기를로드 할 수 있습니까? AdminAppController (컨트롤러는 모든 관리 컨트롤러 그것을 확장하고있는 것인가?) 또는 무엇인가? (Model.initialize 이벤트를 고려해보십시오.) – hamidreza

+0

@hamidreza 예, 설명 된대로 [implementEvents] 메소드를 구현하십시오. [doc] (https://book.cakephp.org/3.0/en/core-libraries/events.html) # 등록 - 청취자) –