2017-11-16 5 views
0

私はCakephp 3アプリケーションを持っており、このプラグインとその下のイベントリスナーを管理者プレフィックスのためだけにロードしたいと思います。 (プロジェクト全体ではない)。cakephp3特別プレフィックス用のロードプラグイン

どのようにすればいいですか?

これは私の

のconfig/bootstrap.phpの私は、このプラグインを読み込む

... 

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

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

は、私はこれらのラインだけあなたが条件付きとして 内部boostrap.phpをルーティング に基づいてコードを実行することはできません

答えて

1

管理プレフィックスに実行したい(私は、ファイルの最後にこれらをロード)アプリのルーティング設定がまだロードされていません。

古い学校スタイルで使用してください。$_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の含まれています:プラグインをロードする際に、ブートストラップを含めることをCakePHPに伝え、その後

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

アプリのブートストラップを。

アプリケーション/設定/ bootstrap.phpの:

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

あなたは条件付きであなたのプラグインを読み込むべきではありません。

あなたのプラグインに対するリクエストで認証を探していると思います。プラグインの使用を許可された管理者に限定したいとします。それはプラグインの問題ではありません。これは認証上の問題で、プラグインの認証コンポーネントを使用して、要求が有効で、現在のユーザーが管理者であることを確認する必要があります。

+0

おかげで、それを読み込むことができます。私はこのイベントリスナーを読み込むことができる他の場所はありますか?これを行うにはcakephpのツールを使用できますか?$ _SERVERを使用するのは悪い習慣です(このイベントは "Model.initialize" btwを使用しています) – hamidreza

+0

いいえ。このプラグインの認証が必要です。私のアプリケーションには2つの部分が含まれています。最初の1つはadmin Webパネルで、もう1つは通常のユーザー向けのWebサイトです。私はadminプレフィックスのためのこのプラグインをロードしたいと思います。そして、eventListenerはadminパネル(私のカスタムタイムスタンプと.....のような)のためにロードするのに必要な振る舞いを処理しています。モデルは管理者プレフィックスになっている場合のみ(私のモデルは管理者とメインサイトで同じなので) – hamidreza

1

引用CakePHPのプラグインのドキュメントhttps://book.cakephp.org/3.0/en/plugins.html#plugin-routes

また、あなたのアプリケーションのルートリスト内のプラグインのルートをロードすることができます。これにより、プラグインルートのロード方法をより詳細に制御でき、追加のスコープやプレフィックスでプラグインルートをラップすることができます。

だからあなたは、あなたのイベントリスナーのために

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

を行うプラグインのブートストラップコンフィギュレーション内

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

ありがとうございました。私はそれを忘れてしまったのですか? AdminAppController(すべての管理者コントローラそれを拡張している)か何か? (「Model.initialize」イベントであると考えてください) – hamidreza

+0

@hamidrezaはい、[doc](https://book.cakephp.org/3.0/en/core-libraries/events.html)のように、メソッドimplementEventsを実装してください#登録 - リスナー) –

関連する問題