使用正则表达式作为路径名应用Laravel过滤器

时间:2015-02-10 15:01:59

标签: regex laravel routing

我正在尝试将路由过滤器应用于除主页之外的所有路径。我是这样做的:

Route::whenRegex('/^\/[\S]+/', 'myFilter');

所以,基本上,我说:匹配所有以/开头的路线,然后是任何非空白字符。但是,过滤器不起作用。

过滤器本身:

Route::filter('myFilter', function() {
    if (Session::has('userRegState')) {
        return Redirect::action('DefaultController@home');
    }
});

我检查了它 - userRegState会话变量已设置,但没有重定向。过滤器中使用的正则表达式是错误的吗?

1 个答案:

答案 0 :(得分:0)

好吧,似乎在Laravel的路由逻辑中可能会出现某种正斜杠剥离,这使得我的模式与它应该的不匹配。为了解决这个问题,我省略了正斜杠。

而不是:

Route::whenRegex('/^\/[\S]+/', 'myFilter');

我这样做:

Route::whenRegex('/^\S{2}/', 'myFilter');

最终正则表达式匹配以至少2个非空白字符开头的任何内容。就我而言,它是正斜杠,后跟任何非空白字符,如/a/page2等。