5

我的应用程序中的路由和回调之间有以下关联:

$api->slim->post('/:accountId/Phone-Numbers/', function($accountId) use ($api) {
    $api->createPhoneNumber($accountId);
});

我要避免的是让路由myhost/a7b81cf/phone-numbers/返回 404 响应,因为 Slim 将路由理解myhost/a7b81cf/Phone-Numbers/为不同,因为使用了大写字母。如何避免设置两个触发相同回调函数的单独路由?

4

3 回答 3

6

这是一个老问题,但我想为这个问题提供一个明确的答案。

有一个“routes.case_sensitive”配置可以让你这样做。我不知道为什么这不在文档中(http://docs.slimframework.com/#Application-Settings),但是如果您查看框架的源代码(特别是在 Slim.php 的 getDefaultSettings() ) 你可以看到它在那里。

我刚刚测试了它,它工作正常。

总而言之,解决方案是像这样应用“routes.case_sensitive”配置:

$configurations = [
    // ... other settings ...
    'routes.case_sensitive' => false
];

$app->config($configurations);
于 2014-10-24T22:19:02.220 回答
0

您可以尝试使用路线验证/条件:

$api->slim->post('/:accountId/:phoneNumbers/', function ($accountId) {
    $api->createPhoneNumber($accountId);
})->conditions(array('phoneNumbers' => '(p|P)hone\-(n|N)umbers'));

或者,如果您想要更多的全局更改,您可以覆盖 Route 类中的 Route->matches 方法以不区分大小写,但这会影响整个应用程序。

于 2013-11-15T11:44:42.930 回答
0

您可以通过注册一个钩子并修改传入路由以匹配您定义的路由的大小写来模仿 Slim 中不区分大小写的路由。

在示例中,您定义的所有路由都应为小写,并strtolower在所有传入路径上调用:

$app->hook('slim.before.router', function () use ($app) {
    $app->environment['PATH_INFO'] = strtolower($app->environment['PATH_INFO']);
});
于 2013-12-11T23:36:51.827 回答