2017-11-16 8 views
0

Ich habe CakePHP 3 Anwendung, und ich möchte dieses Plugin und den Event-Listener darunter nur für Admin-Präfix laden. (nicht das gesamte Projekt).cakephp3 laden Plugin für spezielle Vorwahl

Wie kann ich dies erreichen?

das ist mein

config/bootstrap.php

, wo ich dieses Plugin laden. (I laden diese am Ende der Datei)

... 

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

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

ich diese wollen nur die Linie laufen auf Admin-Präfix

Antwort

1

Sie können nicht bedingt Code ausführen, basierend auf Routing innerhalb boostrap.php als Die Routing-Konfiguration für Ihre App wurde noch nicht geladen.

Sie müssen es tun alte Schule Stil und verwenden $_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()); 
} 

Aktualisiert

Ihr Plugin sollte seine eigene Bootstrap-Datei haben. Welche enthält

Upload/config/bootstrap.php:

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

Die Bootstrap-App dann sagt CakePHP den Bootstrap enthalten, wenn das Plugin geladen.

App/config/bootstrap.php:

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

Sie sollten Ihr Plugin nicht bedingt laden.

Ich denke, Sie suchen nach Authentifizierung bei Anfragen an Ihr Plugin. Sie möchten die Nutzung Ihres Plugins nur autorisierten Administratoren gestatten. Das ist kein Plugin-Problem. Es ist ein Authentifizierungsproblem und Sie sollten die Authentifizierungskomponente in Ihrem Plugin verwenden, um zu überprüfen, ob die Anfrage gültig ist und der aktuelle Benutzer ein Administrator ist.

+0

Dank. Gibt es irgendwo anders, dass ich diesen Event-Listener laden kann (dass ich das Tool von CakePHP dazu verwenden kann? Es fühlt sich schlecht an, $ _SERVER zu verwenden (dieses Event verwendet "Model.initialize") – hamidreza

+0

Nein, ich tue es nicht Ich benötige Auth für dieses Plugin, meine Anwendung enthält 2 Teile, die erste ist Admin Web Panel und die zweite ist die Website für normale Benutzer im Admin Panel muss ich Foto hochladen, aber ich brauche es nicht (Upload Plugin) in der Homepage der Website Ich möchte dieses Plugin für Admin-Präfix laden und der EventListener behandelt die Verhaltensweisen, die zum Laden für Admin-Panel benötigt werden (wie meine benutzerdefinierte Zeitstempel und .....). Es geht nicht wirklich um Zugriffsverwaltung ich möchte es für meine laden Modelle nur, wenn ich im Admin-Präfix bin (weil meine Modelle die gleichen für Admin und Haupt-Website sind) – hamidreza

1

Zitiert cakephp Plugin docs https://book.cakephp.org/3.0/en/plugins.html#plugin-routes

können Sie laden auch Plugin Routen in der Routenliste der Anwendung. Dadurch haben Sie mehr Kontrolle darüber, wie Plug-in-Routen geladen werden, und Sie können Plug-in-Routen in zusätzliche Bereiche oder Präfixe umwandeln.

So können Sie

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

Für Ihre Veranstaltung Zuhörer tun, laden Sie es innerhalb Plugin Bootstrap-Konfiguration

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

Vielen Dank Ich habe gelesen, dass doc paar Male ich nicht weiß, wie ich es vermisste Kann ich den Event-Listener laden im AdminAppController (Controller, der alle Admin-Controller erweitern es) oder so? (In Anbetracht dessen ist es "Model.initialize" Ereignis) – hamidreza

+0

@hamidreza Ja, setzen Sie einfach implementieren Methode 'implementierteEreignisse' wie beschrieben [doc] (https://book.cakephp.org/3.0/en/core-libraries/events.html # Registrierung-Listener) –

Verwandte Themen