我猜是路由问题我尝试了插件名称和控制器名称的 URL 的多种组合。
做了什么
在视图中 (.ctp)
<?php echo $this->Html->link('<h3>Package Name</h3>', ['controller'=>'TourPackages', 'plugin'=>'TourPackages', 'action'=>'sample'], ['title'=>'Package Name', 'class'=>'', 'escape'=>false]);?>
生成像<a href="http://demos.cybershines.com/naturessprout/tour-packages/tour-packages/sample" title="Package Name" class=""><h3>Package Name</h3></a>这样的html
在我的插件路由器中,路由代码是
Router::plugin(
'TourPackages',
['path' => '/tour-packages'],
function (RouteBuilder $routes) {
$routes->fallbacks(DashedRoute::class);
}
);
这个我改成
Router::plugin(
'TourPackages',
['path' => '/tour-packages'],
function (RouteBuilder $routes) {
$routes->get('/tour-packages/tour-packages/*', ['controller' => 'TourPackages']);
$routes->fallbacks(DashedRoute::class);
}
);
它采用插件的“路径”/tour-packages,但控制器为“TourPackages”
所以当我点击http://demos.cybershines.com/naturessprout/tour-packages/TourPackages/sample 时,蛋糕会将我带到正确的位置和视图。所以,我通过添加修改了路由代码
$routes->get('/tour-packages/tour-packages/*', ['controller' => 'TourPackages']);
在 routing.php 中并告诉 cake 为旅游包执行 TourPackagesController。