2016-06-10 2 views
0

페이지에 제품을 나열하는 Laravel 5.1 응용 프로그램을 만들고 있습니다. 이제 데이터베이스의 각 제품에는 제품 세부 정보 페이지의 URL이 있습니다. 저는 모든 URL을 내보내고 라우트를 라우트하는 라우트를 파일로 작성하고 라우트 라우팅에 포함시키는 메소드를 작성했습니다. larovel의 경로를 사용하여 라우팅을 최적화 할 수 있도록하기 위해이 방법을 사용했습니다 : 캐시 명령. 이제 제 질문은 모든 경로가 포함 된 파일을 가지거나 100K 경로를 사용하거나 데이터베이스 내에서 문제의 경로를 비교하고 해당 제품을 반환하는 단일 진입 점을 갖도록하는 것이 더 나은 방법 인 최적화에 관한 것입니다.Laravel 라우팅을위한 최적화 제안

+3

늦게. gazillion 루트를 만들지 마십시오. 경로를 단순화하고 매개 변수를 포함시켜 데이터베이스 검색에 사용하십시오. 전혀. – Here2Help

+0

@ Here2Help, 나는 동의하지 않는다. 요청에 DB 룩업을 추가하는 것만으로도 요청 시간이 늘어나고 심지어 성능에 해로울 수있다. 어쩌면 많은 캐싱이 상황을 조금은 도움이 될지 모르겠지만 나쁜 생각이라고 생각해. – vsharper

+0

@vsharper DB 조회는 제품 주도 웹 사이트와 정확히 일치해야합니다. 새 제품을 추가 할 때마다 노선 파일을 업데이트해야한다고 생각하십니까? 정적 웹 사이트를 구축하고 Laravel과 PHP를 잊어 버릴 수도 있습니다. – Here2Help

답변

4

각 제품마다 개별 경로가 필요하지 않습니다. 데이터베이스에 고유 한 슬러그 (시맨틱 URL)를 저장할 가능성이 있습니까? 그런 다음 경로에 전달 된 내용을 기반으로 제품을 표시하는 하나의 경로를 만듭니다.

사용자 친화적 인 슬러그는 '티셔츠 -9000'과 유사 할 수 있습니다. 이 기능이 필요하지 않은 경우 데이터베이스에서 제품에 대해 이미 설정 한 고유 ID를 항상 사용할 수 있습니다.

show 메서드 내에서 데이터베이스에 대한 요청에서 슬러그 과거를 사용하여 DB를 쿼리해야합니다.

빠른 예 :

에서 routes.php

Route::get('/products/{product}', '[email protected]'); 

제품 컨트롤러

public function show($product) 
{ 
    $productRequested = Product::where('url_slug', $product)->first(); 
    // Do whatever from here 
} 
+0

예! 이.단, 경로에서는'product' 매개 변수를 호출하지만 컨트롤러에서는'$ productRequested'를 호출합니다. 그것을 고치고 싶을지도 모릅니다. – Here2Help

+0

그래, 나는 그것이 같은 이름이 필요하다는 것을 잊었다. 결정된! –

+0

동일한 이름을 지정할 필요는 없지만 덜 혼동스럽게 생각하는 것이 좋습니다. – user3158900

0

사실 당신은 당신의 코드를 최적화하기 위해 당신이 적용됩니다 프레임 워크를 사용하는 것이

경로 파일을 사용하면 매핑 된 UR의 수를 최소화하는 가장 빠른 방법을 얻을 수 있습니다. Ls.

예를 들어 당신이 하나 개의 경로와 URL의 모든 변수를 조작 할 수 laravel하는 심포니가 제공하는 경로의 개념 :

route::get('{category}/{id}/{slug}/{var1}/{var2}/{var3}/{varX}','[email protected]'); 

URL에 모든 변수를 보낼 것이 경로 yourMethod();