2016-07-02 1 views
0

내가 Laravel 5.2 프로젝트를 짓고 있어요 다른 경로를 쫓을 경우 일부 노선들은 작동하지 않으며, routes.php 파일에 나는 다음 두 경로가 있습니다Laravel : 그것은`routes.php` 파일

Route::get("/products/{id}", [ 
    "as" => "products.show", 
    "uses" => "[email protected]", 
]); 

Route::get("/products/search", [ 
    "as" => "products.search", 
    "uses" => "[email protected]", 
]); 

이 순서대로 첫 번째 경로 products.show이 제대로 작동하지만 예상대로 두 번째 경로 products.search은 예상 된 검색 결과 대신 빈 웹 페이지를 제공합니다.

products.show 경로 전에 주문을 변경하고 products.search 경로를 배치하여 문제를 해결하려고 시도했습니다. 그 작업을 수행했을 때 예상대로 잘 작동했습니다.

그래서, 무엇이 잘못 되었습니까? 왜 이런 일이 일어 났습니까?

PS : 또 다른 해결책은 route.php 파일의 시작 부분에 다음 규칙을 배치했다 :

Route::pattern("id", "[0-9]+"); 

을 그리고 나는이 규칙을 추가 할 때, 두 노선들은 발견했다, 하나가 제공하는 중요하지 않습니다 먼저. 하지만이 규칙을 추가하지 않으면 어떻게 될까요?

답변

4

라우팅 시스템은 일치하는 항목을 찾으면 즉시 중지합니다. 그럼 당신은이 세 가지가 있다고 가정 해 봅시다 :

Route::get("/products/{variableA}" // ... 
Route::get("/products/{variableB}" // ... 
Route::get("/products/{variableC}" // ... 

이제 /products/someroute로 이동합니다. 첫 번째 트리거 만 트리거되고 두 개의 다음 트리거는 절대 활성화되지 않습니다.

패턴 제한이란 {id} 변수를 찾고 있기 때문에 /products/search으로 이동하면 첫 번째 패턴이 트리거되지 않음을 의미합니다.

{id}은 아무런 제한이 없습니다. 예를 들어 search 문자열과 같습니다. 그런 다음 두 번째 경로가 실행되지 않습니다. 따라서 작업을 수행하려면 역순으로 처리해야합니다.

여기에서 읽을 수있는 경로 모델 바인딩을 사용할 수도 있습니다. https://laravel.com/docs/5.2/routing#route-model-binding

관련 문제