我有Cakephp 3应用程序,我想加载这个插件和它下面的事件监听器只是为了管理员前缀。 (不是整个项目)。
我怎么能做到这一点?
这是我的
配置/ bootstrap.php中
我加载这个插件。 (我在文件末尾加载这些文件)
...
Plugin::load('Josegonzalez/Upload');
\Cake\Event\EventManager::instance()->on(new \App\Controller\Event\AppEventListener());
我希望这些只能在管理员前缀
上运行答案 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());