最后一个连字符后的Laravel路线

时间:2014-04-17 22:02:33

标签: php laravel

说我有以下网址:

/blog/this-is-a-post-20

我希望将它分开:

$urlTitle = "this-is-a-post";
$id = 20;


我目前正在尝试以下方法:

Route::get('blog/{urlTitle}-{id}', function($urlTitle, $id)

但它没有用,它给了我:

$urlTitle = "this";
$id = "-is-a-post-20"

1 个答案:

答案 0 :(得分:4)

Route::get('blog/{urlTitle}-{id}', function($urlTitle, $id) {
    var_dump($urlTitle); // this-is-a-post
    var_dump($id);       // 20
})->where('urlTitle', '.*');

这将使urlTitle匹配0+个字符的正则表达式。表达式尝试尽可能匹配 。这意味着它将首先尝试匹配this-is-a-post-20并失败,因为该路线无法继续匹配-{id}。它"回溯"直到它也能找到-{id}

为了提高效率,请将.*正则表达式替换为.*(?=-),其中将匹配0+个字符,后跟-。这将减少正则表达式引擎需要回溯的次数。