CakePHP 3插件路径似乎没有加载

时间:2016-04-05 21:56:04

标签: cakephp plugins routing

我正在尝试在CakePHP 3.2的插件中加载路由。如果我将路由放在核心routes.php文件中,它们工作正常,但不在我的插件routes.php文件中。

插件名称为:MFC / HDParser。

路径为:/ vendor / mfc / hdparser。 (该插件最初是插入到plugins目录中,但是将其转移到vendor目录(以及更新的所有文件),以防万一出现问题。)

在核心引导程序文件中,我有:

Plugin::load('MFC/HDParser', ['bootstrap' => true, 'routes' => true, 'autoload' => true]);

/ vendor / cakephp-plugins包含以下行:

'MFC/HDParser' => $baseDir . '/vendor/mfc/hdparser/'

/composer.json包含:

"autoload": {
    "psr-4": {
        "App\\": "src",
        "mfc\\hdparser\\": "./vendor/mfc/hdparser/src",
    }
},

我的/vendor/mfc/hdparser/config/routes.php包含:

use Cake\Routing\Router;

Router::plugin(
        'MFC/HDParser', ['path' => '/hdparser'], function ($routes) {
         $routes->connect('/charactersheet', ['plugin' => 'MFC/HDParser', 'controller' => 'Charactersheet', 'action' => 'index']);

//  $routes->connect('/:controller');
//
//$routes->resources('Charactersheet');
//        $routes->fallbacks('DashedRoute');
//}
);
//Router::connect('/charactersheet', ['plugin' => 'MFC/HDParser', 'controller' => 'Charactersheet', 'action' => 'index']);

我也尝试过使用'path'=> '/ MFC / hdparser'

当我尝试访问site.dev/charactersheet时,我收到“错误:无法找到CharactersheetController。”

如果我尝试使用/ mfc / hdparser / charactersheet,/ MFC / HDParser / charactersheet或/ mfc ...,/ m_f_c ...,/ Mfc ...等路线,我会得到一个丢失的控制器( 'Mfc')错误。

如果我放线:

Router::connect('/charactersheet', ['plugin' => 'MFC/HDParser', 'controller' => 'Charactersheet', 'action' => 'index']);

在核心routes.php文件中(在作用域之外,在插件:load()之前;或者在使用$ routes-> connect()的作用域内),它可以正常工作。

我尝试使用下划线,短划线和camelcase来改变一切。

我已经挖掘了文档(http://book.cakephp.org/3.0/en/plugins.htmlhttp://book.cakephp.org/3.0/en/development/routing.htmlhttp://api.cakephp.org/3.2/class-Cake.Routing.Router.html)并尝试了我在那里(和此处)找到的所有内容,以及使用CakeDC / Users插件作为模板,但我仍然缺少一些东西......

- MFC

1 个答案:

答案 0 :(得分:1)

我遇到了与CakePHP 3.3相同的问题,我的插件中的routes.php文件未加载。

我在加载插件后添加Plugin::routes();来修复它。此方法加载插件的所有路由,其中​​配置具有'routes' => true

E.g。

Plugin::load('MyPlugin', ['routes' => true]);
Plugin::routes();