2016-08-16 2 views
0

그래서, 내 경로에 매개 변수를 처리하기 위해 정규식을 사용하고 있지만 내 page var에 2 개의 규칙을 만들어 함께 작동하는 것 같습니다. (경로 규칙은 type VAR이 어디에서 왔는지 궁금해하는 사람들 일부, 경로 그룹 내에서, 그 부모 경로 그룹에서)Laravel Route Regex 대체 규칙 작동하지 않습니다.

내가 동의 할 : 여기

Route::get('/{page}', 'Backend\[email protected]')->where(['type' => 'blog|site', 'page' => '^add$|^[0-9]+$']); 

편집 내 코드입니다 문자열 "add" 또는 integers 중 하나가 있지만 첫 번째 식만 수락하는 것 같습니다. (첫 번째 식만 표현식의 위치를 ​​바꾸려고했습니다).

어떤 아이디어가 문제입니까? 이후 내 type var도 2 단어를 수락하는 정규식이 있습니다. Im은 Laravel 5.2에서 뛰었고 im은 laravel에서 시작되었습니다. 감사합니다

업데이트

는 2 발현 패턴에 의한 문제의 밤은이 여전히 첫 번째 표현식 만

+0

어쩌면 ''정규식 :/^ (add | [0-9] +) $/''('regex :/blog | site/'와 동일) 도움이 될 것입니다. –

+0

'Route :: get ('/ {page}', 'Backend \ PageController @ viewPage') -> 어디에서 ([ 'type'=> 'regex :/blog | site /']); @Wiktor Stribiżew –

답변

0

Laravel 라우터 (상속 심포니 위해 일하고 있는지 확인

Route::get('/{page}', 'Backend\[email protected]')->where(['type' => 'blog|site', 'page'=>'^add$|^test$']);

시도 라우터) adds 문자열 앵커의 시작과 끝 ( ^, $)에 따라 각각을 제한 조건 정규 표현식을 제거하는 동안 existing ones. 대안이 정규 epxression |에서 사용되면 전체 패턴은 괄호로 묶입니다.
#^/(?:add$|^[0-9]+)$#s 

가 참고로 첫 번째 /이 경로 자체에서 잡힌 슬래시 :

그래서 귀하의 경우, 마지막으로 컴파일 된 정규식은 다음과 같이 될 것이다. 이 RegEx가 제공하는 것을 살펴보면, 이 시작으로 표시되고 결코 발생하지 않는 패턴 중간에 잘못된 자리 표시가 있음을 알 수 있습니다.

해결책이에 정규식을 변경하는 것 :

로 컴파일됩니다
add|[0-9]+ 

:

#^/(?:add|[0-9]+)$#s 

Larave 경로 :

Route::get('/{page}', 'Backend\[email protected]') 
    ->where(['page' => 'add|[0-9]+']); 
+0

감사합니다 @revo! 정규식 테스터 온라인에서 내 정규식 패턴을 시도하고 그것을 작동하는 것을 보여줍니다. 결코 그것이 다르게 취급 될 것이라고 생각 laravel –