PHP SLIM不接受uri参数中的点(。)

时间:2013-08-21 16:22:51

标签: php slim

我试图通过使用slim来构建亵渎过滤API。这是api的链接。

Link : http://www.employeeexperts.com/Profanity/index.php/rest/check/hello

在链接结束时,我附加“hello”这个词进行亵渎性检查。直到现在,它正常运作。但是,当我在单词的末尾添加任何点(。)(例如:hello ..)时,Slim将控件重定向到索引页。

我的GET路由器代码是这样的..

$app->get('/service/:method/:str', function ($method, $str) use ($app) {    
     // Internal codes goes here
});

任何人都可以帮我弄清楚如何阻止这一点。

此致

2 个答案:

答案 0 :(得分:0)

似乎默认的GET路由器不允许您以点结尾的URL。如果点后有任何字符,页面将正常运行。作为替代方案,您可以尝试自定义路由条件,如下所示: http://docs.slimframework.com/#Route-Conditions

您的案例示例:

<?php
$app = new \Slim\Slim();
$app->get('/service/:method/:str', function ($year) {
    echo "You are viewing archives from $year";
})->conditions(array('str' => '([a-z]+)', 'str' => '(.*)'));

如果您计划使用API​​处理复杂数据(如完整文章或类似文章),我建议您通过POST传输数据。它可以为您节省很多麻烦。

答案 1 :(得分:0)

我也有这个问题,这是我的解决方案:

$app->get('/service/+args', function ($args) use ($app) {    
    $arguments = str_replace("/service/", $app->request->getPathInfo());
    $args = explode('/', $arguments);
    var_dump($args);
});

当我访问网址/service/foo/bar时,$args将是这样的:

array(
    'foo',
    'bar',
)

此外,当我访问网址/service/foo/bar/baz/qux时,$args将是这样的:

array(
    'foo',
    'bar',
    'baz',
    'qux',
)