CakePHP 3.x
在路由文档(https://book.cakephp.org/3.0/en/development/routing.html)中,它说:
如果您的应用程序中只有一个控制器,并且您不希望控制器名称显示在URL中,则可以将所有URL映射到控制器中的操作。例如,要将所有URL映射到家庭控制器的操作,例如像/ demo而不是/ home / demo这样的URL,您可以执行以下操作:
$routes->connect('/:action', ['controller' => 'Home']);
这很好,因为这意味着我可以在src/Controller/HomeController.php
中执行此类操作:
public function foo()
{
// Accessible through URL "/foo"
}
public function bar()
{
// Accessible through URL "/bar"
}
但是如果我需要将参数传递给函数,例如
public function baz($a, $b, $c)
{
}
它会给我一个"失踪控制器"如果我调用以下任何URL,则会出错:
/baz/2
/baz/2/17
/baz/2/17/99
它说我需要创建" BazController"。
所有这些,将起作用,因为它们包含控制器名称:
/home/baz/2
/home/baz/2/17
/home/baz/2/17/99
据推测这是一个路由问题?
有趣的是,在没有任何参数的情况下调用/baz
可以正常工作。
答案 0 :(得分:0)
@arilia评论中提供的正确答案是:
$routes->connect('/:action/*', ['controller' => 'Home']);
我的问题中提供的网址现在将如下工作。所有这些都将映射到HomeController.php
并执行baz()
函数:
/baz/2
/baz/2/17
/baz/2/17/99
*
(/:action/*
中app/routes.php
的末尾)是允许在网址中传递任意数量参数的关键。