我正在尝试在CakePHP3中使用前缀路由。我在/config/routes.php中添加了以下几行。
Router::prefix("admin", function($routes) {
// All routes here will be prefixed with ‘/admin‘
// And have the prefix => admin route element added.
$routes->connect("/",["controller"=>"Tops","action"=>"index"]);
$routes->connect("/:controller", ["action" => "index"]);
$routes->connect("/:controller/:action/*");
});
之后,我创建了/src/Controller/Admin/QuestionsController.php,如下所示。
<?php
namespace App\Controller\Admin;
use App\Controller\AppController;
class QuestionsController extends AppController {
public function index() {
//some code here
}
}
?>
最终,我尝试访问localhost/app_name/admin/questions/index
,但出现错误消息,Error: questionsController could not be found
。但是,当我将控制器名称的首字母大写时(即localhost / app_name / admin / Questions / index),它可以正常工作。我认为这很奇怪,因为没有前缀,我可以使用第一个字符不大写的控制器名称。这是某种错误吗?
在Cake 3.x中,默认情况下路由不会再发生变化,而是您必须显式地使用InflectedRoute
route类,例如在默认routes.php
应用程序配置中看到的bee即可:
Router::scope('/', function($routes) {
// ...
/**
* Connect a route for the index action of any controller.
* And a more general catch all route for any action.
*
* The `fallbacks` method is a shortcut for
* `$routes->connect('/:controller', ['action' => 'index'], ['routeClass' => 'InflectedRoute']);`
* `$routes->connect('/:controller/:action/*', [], ['routeClass' => 'InflectedRoute']);`
*
* You can remove these routes once you've connected the
* routes you want in your application.
*/
$routes->fallbacks();
});
您的自定义路由未指定特定的路由类别,因此将使用默认Route
类别,而后备路由会使用变形的路由,这就是为什么它不带前缀的原因。
因此,请在您的URL中使用大写的控制器名称,或使用类似的路由类InflectedRoute
将它们正确转换:
Router::prefix('admin', function($routes) {
// All routes here will be prefixed with ‘/admin‘
// And have the prefix => admin route element added.
$routes->connect(
'/',
['controller' => 'Tops', 'action' => 'index']
);
$routes->connect(
'/:controller',
['action' => 'index'],
['routeClass' => 'InflectedRoute']
);
$routes->connect(
'/:controller/:action/*',
[],
['routeClass' => 'InflectedRoute']
);
});
另请参见http://book.cakephp.org/3.0/en/development/routing.html#route-elements
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句