如果路线以某个 string/character 开头,则更改路线

Change route if it starts with a certain string/character

我在 routes.php 中有这个:

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

这非常适合 URL 这样的 https://domain.world/a/5nxdy9lmcthc。当我想根据 URL.

中的第一个字符启用不同的路由时,我失败了

例如这些不同的行动目标:

它现在可以与 / 一起使用,但由于某些原因我想省略 / 所以 URL 将是 https://domain.world/a5nxdy9lmcthchttps://domain.world/b5nxdy9lmcthc这将触发不同的操作,因为 ab 作为 /.

之后的第一个字符

我的问题:

使用 * 是否可能或是否需要斜线?

greedy star(*)和trailing star(**)是path segment operators,他们会匹配剩下的path segments,他们不匹配段的 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');

另见