如果路线以某个 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.
中的第一个字符启用不同的路由时,我失败了
例如这些不同的行动目标:
a*
--> aAction
b*
--> bdAction
c*
--> cbAction
...
它现在可以与 /
一起使用,但由于某些原因我想省略 /
所以 URL 将是 https://domain.world/a5nxdy9lmcthc
或 https://domain.world/b5nxdy9lmcthc
这将触发不同的操作,因为 a
和 b
作为 /
.
之后的第一个字符
我的问题:
使用 *
是否可能或是否需要斜线?
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');
另见
我在 routes.php
中有这个:
$builder
->connect( '/a/*', [ "controller" => "Api", "action" => "foo" ] )
->setHost("domain.world");
这非常适合 URL 这样的 https://domain.world/a/5nxdy9lmcthc
。当我想根据 URL.
例如这些不同的行动目标:
a*
-->aAction
b*
-->bdAction
c*
-->cbAction
...
它现在可以与 /
一起使用,但由于某些原因我想省略 /
所以 URL 将是 https://domain.world/a5nxdy9lmcthc
或 https://domain.world/b5nxdy9lmcthc
这将触发不同的操作,因为 a
和 b
作为 /
.
我的问题:
使用 *
是否可能或是否需要斜线?
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');
另见