使用可选参数时,允许使用可选的尾部斜杠

时间:2012-06-28 20:25:48

标签: php slim

鉴于此路径:/page(/:pageID),如何允许以下变体:

  • /page/page/(即使缺少pageID部分。
  • /page/1/page/1/

谢谢。

5 个答案:

答案 0 :(得分:8)

您必须以这种方式定义路线:

$app->get('/page(/:id/?)', function ($id = NULL) use ($app) {
    ; // your code
});

答案 1 :(得分:4)

@inst提供的答案在这里不起作用(在XAMPP上运行Slim 2.0.0):/ page /给出了404.

这适用于所有四种情况:

$app->get('/page(/)(:id/?)', function ($id = NULL) use ($app) {
  echo 'success';
});

答案 2 :(得分:2)

documentation中所述,可选细分可能会因使用情况而不稳定。例如,Fabien Snauwaert给出的答案以及以下路线:

/:controller(/)(:action(/)(:overflow+/?))
/:controller(/)(:action(/:overflow+/?))

如果未填写所有参数,则在获取参数值时,这些参数将位于右侧,从而产生action == controlleroverflow == action

为了防止这种情况,一个简单的解决方案是将可选的斜杠放在路径的末尾。

/:controller(/:action(/:overflow+))/?
/:controller(/:action(/:overflow+))(/)

它更具可读性,不是吗?

我无法评论其他人的答案,所以我在这里写下有关伊戈尔回应的详细信息。

这种方法的一个“问题”是,如果用户尝试访问不存在的页面,并且还使用尾部斜杠,则将显示301重定向以显示404页面。也许有点奇怪。

答案 3 :(得分:1)

我发现这种方式可以在启用Apache mod_rewrite的情况下实现。 .htaccess

的摘录
RewriteEngine On

# remove trailing slash
RewriteCond %{HTTPS} off
RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteRule ^(.+[^/])/$ https://%{HTTP_HOST}/$1 [R=301,L]

答案 4 :(得分:1)

Slim V3的示例:

/[{param1:[0-9]+}[/[{param2:[0-9]+}[/]]]]

这将涉及:

/
/1
/1/
/1/2
/1/2/
相关问题