2013-10-17 3 views
0

전문가에게 물어볼 시간이라고 생각했기 때문에 꽤 많은 곳을 보았습니다.와일드 카드를 사용할 때의 라우트 경로 문제

나는 laravel을 가지고 놀고 있는데 라우팅과 관련된 몇 가지 문제가 있습니다.

나는 페이지의 접두어를 사용하지 않는 종류의 제품 카탈로그와 제품 카탈로그를 갖고있다.

제품이 'example.com/my-product'이 될 수 있으며 페이지가 나는 URL이 페이지 또는 일치하는지 확인하려면 내 경로에서

'example.com/my-page'수 있습니다 제품 또는 둘 중 하나를 선택하고 특정 컨트롤러/동작으로 리디렉션하십시오.

현재 나는

Route::any('/{slug}', function($slug) { 
    $page = App\Models\Page::firstByAttributes(['slug' => $slug]); 
    if($page) { 
    // go to [email protected] 
    } 
})->where('slug', '.*'); 

이 페이지를 구분하고 제품이 괜찮습니다, 난 그냥 제품 검사의 경우 ($ 페이지) 후 ELSEIF 팝업거야하지만 난 방법으로 난처한 상황에 빠진하고 있습니다 일단 내가 URL이 DB의 페이지를 가리킨다 고 결정했다면, PagesController에 도착해야합니다.

도움을 주시면 감사하겠습니다.

편집 :

내 페이지 컨트롤러 :

class PagesController extends BaseController { 

    public function find() 
    { 
     echo 'asdaasda'; die; 
    } 
} 

나는 이것이 패션 후에 일을하지만 내가 원하지 않는 것을 얻을 수 있습니다. 페이지의 처리 및 렌더링을 처리하기 위해 URL을 그대로 유지하고 PagesController가 필요합니다. 내가 작동하도록 할 수있는 유일한 방법은 라우트 파일에 Route :: Controller ('pages', 'PagesController')를 추가 한 다음 getFind에 대한 찾기 기능을 수정하는 것입니다.하지만 이는 예제처럼 보이는 URL로 끝납니다. example.com/about-us의 줄에있는 원래 URL이 아닌 com/pages/find /를 사용하십시오.

답변

1

는이

Route::any('/{slug}', function($slug) { 
    $page = App\Models\Page::firstByAttributes(['slug' => $slug]); 
    if($page) { 
     return Redirect::action('[email protected]', array($page)); 
    } 
})->where('slug', '.*'); 

또한 약간 더 읽기 쉬운 방식으로이를 달성하기 위해 경로 필터를 사용하여 고려할 수보십시오.

+0

고마워요.하지만 "알 수없는 동작"오류가 발생했습니다. 아직 페이지 컨트롤러에 "찾기"작업이 있습니다. –

+0

PagesController 코드도 게시 할 수 있습니까? –

+0

@SamParmenter가 PagesController로 pagesController를 변경합니다. 대소 문자를 구별한다고 생각합니다. –

0

이 방법이 나쁜지는 잘 모르겠지만이 문제를 해결할 수있는 유일한 방법은 routes.php에서 다음을 수행하는 것입니다. 우리는 그 URL과 페이지가 아닌 경우, 특정 페이지의 경로를 추가하는 경우

$url = \URL::current(); 
$url = explode('/', $url); 
$end = end($url); 

if($page = App\Models\Page::firstByAttributes(['slug' => $end])) { 
    Route::get('/'.$end, '[email protected]'); 
} elseif($product = App\Models\Product::firstByAttributes(['slug' => $end])) { 
    Route::get('/'.$end, '[email protected]'); 
} 

이 기본적으로 다음 URL의 마지막 부분을 얻고 우리가 URL을 맞는 제품이있는 경우는 확인, 확인 해당 제품의 경로를 추가합니다.

누구나 내가 알고 싶어하는 더 깨끗한 해결책을 갖고 있다면. laravel에는 "pages/page-url"과 같은 접두어를 붙이지 않아도 데이터베이스 페이지를 기반으로 경로를 만드는 방법이 없다고 상상할 수 없습니다.

관련 문제