【发布时间】:2015-02-26 05:06:06
【问题描述】:
在 Laravel 中,我试图实现在 URL 中包含可变数量的类别的能力,然后是 slug。例如:
www.trashaccount.com/category1/category2/slug
我在 Laravel 中使用路由模式来识别类别
Route::pattern('cat', '([-a-zA-Z0-9]+\/?)*');
演示/测试路线如下所示:
Route::get('test/{cat}/{slug}', function($cat, $slug) {
$categories = explode('/', $cat);
$i = 1;
foreach($categories as $category) {
echo "category " . $i . ": " . $category . "<br>";
$i++;
}
echo "slug: " . $slug . "<br>";
});
这可以在 www.trashaccount.com/test/{cat}/.../{slug} 进行测试
此代码成功提取了任意字符长度的可变数量的类别;例如这有效:
http://www.trashaccount.com/test/cat1/cat2/cat3/abcdefghijklmnopqrstuvwxyzabcdevg/my-slug
中断的地方在于最后一个元素 {slug} 的字符数。出于某种原因,超过 17 个字符的任何内容都会引发 NotFoundHttpException。所以,这不起作用:
http://www.trashaccount.com/test/cat1/abcdefghijklmnopqr
但如果你只是删除“r”(18h 字符),它就可以工作。
为了澄清(因为我的帖子在另一个论坛上被误解了),您可以输入任意数量的类别,它们可以是任意长度(尊重 HTTP 限制),它们将被接受和处理。我标记为 {slug} 的最后一个元素不能超过 17 个字符而不会引发 NotFoundHttpException 错误。
有人知道我做错了什么吗?
谢谢!
【问题讨论】: