cakephp 如果路由以特定字符串/字符开头,则更改路由

ilmyapht  于 2022-11-12  发布在  PHP
关注(0)|答案(1)|浏览(145)

我在routes.php中有这个:

$builder
    ->connect( '/a/*', [ "controller" => "Api", "action" => "foo" ] )
    ->setHost("domain.world");

这对于像https://domain.world/a/5nxdy9lmcthc这样的URL非常有效。当我想根据URL中的第一个字符启用不同的路由时,我失败了。
例如,这些不同的行动目标:

  • a* --〉aAction
  • b* --〉bdAction
  • 一米六一--〉一米七一......

它现在可以与/一起工作,但由于某些原因,我想省略/,因此URL将是https://domain.world/a5nxdy9lmcthchttps://domain.world/b5nxdy9lmcthc,这将触发不同的操作,因为ab/之后的第一个字符。

我的问题:

是否可以使用*,或者是否需要使用斜线?

5w9g7ksd

5w9g7ksd1#

贪婪星星(*)和尾随星(**)是路径段运算符,它们将匹配其余的路径段,它们不匹配一个段的 parts,所以是的,需要斜线。
您可以对自定义路线元素使用正则表达式,以实现您所需的效果:

$builder
    ->connect('/{key}', ['controller' => 'Api', 'action' => 'aAction'])
    ->setPatterns(['key' => 'a[a-z0-9]+'])
    ->setPass(['key'])
    ->setHost('domain.world');

$builder
    ->connect('/{key}', ['controller' => 'Api', 'action' => 'bAction'])
    ->setPatterns(['key' => 'b[a-z0-9]+'])
    ->setPass(['key'])
    ->setHost('domain.world');

$builder
    ->connect('/{key}', ['controller' => 'Api', 'action' => 'cAction'])
    ->setPatterns(['key' => 'c[a-z0-9]+'])
    ->setPass(['key'])
    ->setHost('domain.world');

另请参阅

*操作手册〉路线〉连接路线
*操作手册〉路线〉连接路线〉路线元素

相关问题