2014-02-14 50 views
0

炸响路由如何引爆一个laravel经常在Laravel4

Route::getCurrentRoute()->getActionName() // [email protected] 

成数组表达式:命名空间,控制器,方法,行动

我创建了EXPR:

(.*)\\(.*)[email protected](get|post|put|delete|patch)(.*) 

但它不适用于所有路线

Admin\[email protected] 
Admin\[email protected] 
Other\Namespace\Admin\[email protected] 
Admin\[email protected] 
Admin\[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

http://regexr.com?389rh 它不适用于最后4项。

+1

这将是因为您的\\在您的正则表达式中不是可选的。让它成为可选的,它也可以用于最后4个。 – Tularis

+0

哈哈哈:)我忘了?选项:) 完全正确的正则表达式是: (。* \\\)?(。*)Controller @(get | post | put | delete | patch)(。*) – BlueMan

+0

取决于您想要允许的/或捕获)。 (。* \\)?匹配任何(或者什么都没有),然后匹配任何东西(或者什么也不匹配)。或者什么也没有。虽然(。+)\\?(。*)会匹配任何东西(或没有任何内容),然后匹配一个可选的斜线,然后匹配任何内容(或者什么都不)。换句话说:两者都做同样的事情。然而,在第一场比赛中,你们抓住了\,而我的球员根本没有抓住\(根据OP的正则表达式) – Tularis

回答

0

它不匹配最后4个项目,因为项目在控制器之前不包含\。您的正则表达式需要他们拥有它,并因此不符合它。答案是通过使用一个? (= 0或1次出现),如下所示:

(.*)\\?(.*)[email protected](get|post|put|delete|patch)(.*) 

在旁注中,您确定控制器没有特定名称吗?即。一个名为“Controller”的控制器也将与您的正则表达式匹配。要禁止(并且只允许[something] Controller),您可以将2nd。*更改为。+(从0或更多匹配到1或更多匹配)。像这样:

(.*)\\?(.+)[email protected](get|post|put|delete|patch)(.*) 

并为你的方法同样的事情(让|文章|等):

(.*)\\?(.+)[email protected](get|post|put|delete|patch)(.+) 
0

假设控制器

\[email protected](get|post|put|delete|patch)(.*) 
之前,你不会有任何的空间围在那里

使用.*而不是\S+也可以。

+0

它不会,因为我不想在“控制器”之前“切断”每一个字符串。我想在Controller之前剪下一个字符串,但是不会太远,直到\。应该使用其他剪切表达式。 – BlueMan