cakephp3加载插件的特殊前缀

时间:2017-11-16 15:43:22

标签: cakephp plugins prefix

我有Cakephp 3应用程序,我想加载这个插件和它下面的事件监听器只是为了管理员前缀。 (不是整个项目)。

我怎么能做到这一点?

这是我的

  

配置/ bootstrap.php中

我加载这个插件。 (我在文件末尾加载这些文件)

...

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

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

我希望这些只能在管理员前缀

上运行

2 个答案:

答案 0 :(得分:1)

您无法根据 boostrap.php 中的路由有条件地运行代码,因为您的应用的路由配置尚未加载。

您必须使用旧学校样式并使用$_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文件。其中包含

上传/配置/ bootstrap.php中:

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

应用程序的引导程序然后告诉CakePHP在加载插件时包含引导程序。

应用/配置/ bootstrap.php中:

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

您不应有条件地加载插件。

我认为您正在搜索对插件的请求进行身份验证。您希望仅限授权管理员使用插件。这不是插件问题。这是一个身份验证问题,您应该使用插件中的身份验证组件来验证请求是否有效,以及当前用户是否为管理员。

答案 1 :(得分: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());