gpt4 book ai didi

routes - 此 nette 路由规则是否可能将所有 url 请求重定向到主页?

转载 作者:行者123 更新时间:2023-12-02 16:53:16 27 4
gpt4 key购买 nike

我作为初级开发人员与一位高级开发人员争论,他说我的路由是错误且危险的,所有请求都可能被路由到 homepege,但我认为他错了,我什至测试了它。他说通过添加这个

$this->router[] = new Route('/', 'Front:Bridge:default');

此定义以下的所有路由都将被忽略,所有内容都将路由到 Front:Bridge

我认为这是废话,因为该路由明确指出仅将请求直接重定向到 Web 根目录到 Front:Bridge。应用程序的功能确实没有改变,但他坚持认为我肯定会在某个地方引入不可预见的错误。

整个 routerFactory 供引用

public function getRouter()
{
$this->router[] = new Route('/muj-ucet[/<action=default>]', [
'module' => 'Front',
'presenter' => 'Account',
'action' => [
Route::VALUE => 'default',
Route::FILTER_TABLE => [
'zpravy' => 'message',
'profil' => 'profile',
'objednavky' => 'orders',
'sprava-uzivatelu' => 'users'
],
],
]);
$this->router[] = new Route('/', 'Front:Bridge:default');
$this->router[] = new Route('[<lang [a-zA-Z]{2}>/]html/prihlaseni.html', 'OnlineUser:Front:Login:default');
$this->router[] = new Route('/superadmin/prihlaseni', 'OnlineUser:Front:Login:superAdminLogin');
$this->router[] = new Route('[<lang [a-zA-Z]{2}>/]html/registrace.html', 'OnlineUser:Front:Registration:default');
$this->router[] = new Route('/potvrzeni-registrace', Linker::ACTION_CONFIRM_REGISTRATION);
$this->router[] = new Route('/aktivace-uctu', Linker::ACTION_ACTIVATION_ACCOUNT);
$this->router[] = new Route('/nove-heslo', Linker::ACTION_FORGOT_PASSWORD);
$this->router[] = new Route('/logout', 'OnlineUser:Front:Login:logout');
$this->router[] = new Route('/validace/<action=default>', [
'module' => 'OnlineUser:Front',
'presenter' => 'Validation',
'action' => [
Route::VALUE => 'default',
Route::FILTER_TABLE => [
'validace-emailu' => 'validateEmailNotExists',
'validace-ico' => 'validateIcNotExists',
'validace-ico-ares-heo' => 'validateIcAresAndHeO',
],
],
]);
$this->router[] = new Route('[<path .+>]', 'Front:Bridge:default');
return $this->router;
}

最佳答案

解决这场争论的一个好方法是从官方 Nette docs 中获取引用。 .

在我们回答您的问题之前,重要的是remember the order of routes matter :

Order of routes is important, because they are tried sequentially from the first one to the last one. Basic rule is we declare routes from the most specific to the most general.

接下来,回想一下路由完全匹配。如果有 /foo 的路由,它将与 /foo/bar 的请求不匹配。对此没有官方引用,但它是隐含的,并且可以通过测试应用程序轻松验证。

有了这些知识,让我们来看看您的提案。如果您使用此路线:

$this->router[] = new Route('/', 'Front:Bridge:default');

你是对的。这只会匹配 /。不是 /foo,不是 /foo/bar 等。由于它是如此明确,所以顺序并不重要,并且没有太多灾难的空间。

但是,在您的代码片段末尾有一条重要的路线:

$this->router[] = new Route('[<path .+>]', 'Front:Bridge:default');

这是一条包罗万象的路线,与匹配 / 不同,并且可能是您的同行真正担心的:因为它不明确(通过匹配所有路径!)这条路线的顺序肯定很重要。通过将其放在第一位,所有请求都将重定向到 Front:Bridge:default

关于routes - 此 nette 路由规则是否可能将所有 url 请求重定向到主页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49066238/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com