CakePHP 3 - 使用单个控制器将参数传递给应用程序,其中所有请求都路由到它

时间:2018-03-15 15:28:54

标签: cakephp routing cakephp-3.x

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 可以正常工作。

1 个答案:

答案 0 :(得分:0)

@arilia评论中提供的正确答案是:

$routes->connect('/:action/*', ['controller' => 'Home']); 

我的问题中提供的网址现在将如下工作。所有这些都将映射到HomeController.php并执行baz()函数:

/baz/2
/baz/2/17
/baz/2/17/99

*/:action/*app/routes.php的末尾)是允许在网址中传递任意数量参数的关键。