2017-12-19 5 views
0

저는 Laravel에서 새로운입니다. 컨트롤러에 슬러그를 어떻게 찾을 수 있습니까? 예를 들어, 내 실제 URL을 내가 컨트롤러의 변수에 "연락-우리를"값을 얻을 필요가슬러그를 컨트롤러로 가져 오는 방법은 무엇입니까?

www.example.com/contact-us입니다. 간단한 방법이 있습니까?

예를 들어 www.example.com/faq과 같은 다른 URL에서 동일한 변수에 "faq"값이 있어야합니다. 내가 어떻게 해?

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\StaticModel; 

class StaticController extends Controller 
{ 
    public function index($slug) { 
     var_dump($slug); // I need to get a variable with value of my actual slug 
    } 
} 
+0

이 "슬러그는"안 :

Route::get('/{slug}', '[email protected]')->where('slug', 'faq|contact|something'); 

위의 선언은 다음 URL을 일치합니다 당신 컨트롤러의 행동? – ArtOsi

+0

[documentation] (https://laravel.com/docs/5.5/routing)에는 라우팅에 대해 자세히 설명되어 있습니다. 너 뭐 해봤 니? – apokryfos

+0

아니요. "staticPage"컨트롤러 같은 것을 만들고 싶습니다.이 컨트롤러는 내용 만 인쇄합니다. 다른 건 없어. 나는 각각의 정적 서브 페이지를위한 컨트롤러를 만들고 싶지 않다. 그래서 나는 슬러그를 가져 가고 싶다. 그리고 DB에서 행을 찾아서 텍스트를 인쇄 할 수있다. 나는 약 12-13 개의 정적 서브 페이지를 가지고있다. 그래서 나는 똑같은 일을 할 12 개의 컨트롤러를 만드는 것이 매우 어리석은 일이라고 생각한다. 그래서 필요한 것은 변수의 이름입니다. 내 슬러그가 저장되어 컨트롤러 내에서 사용할 수 있습니다. 물론, 존재하는 경우 ... – MegoSoft

답변

1

정적 페이지 슬러그를 만들 수 있습니다. 매개 변수 :

Route::get('/home', '[email protected]')->name('home'); 
Route::get('/{slug}', '[email protected]'); //This replaces all the individual routes 

정적 컨트롤러는 :

public class StaticController extends Controller { 
    public function index($slug) { 
      // if the page was /faq then $slug = "faq"    
    } 
} 

그러나 순서는 당신이 루트 문제를 선언 있음을주의해야합니다. 따라서 마지막에 일반적인 "catch-all"경로 앞에 다른 모든 경로를 선언해야합니다.

이 경우
Route::get('/{slug}', '[email protected]'); 

에서, index 방법은 $slugslug을받을 것이다 : 예를 들어, 그래서 대신 각 페이지/슬러그 여러 경로를 선언

1

당신에게 내 StaticController 파일에 어떤

Route::get('/home', '[email protected]')->name('home'); 
Route::get('/podmienky-pouzitia', '[email protected]'); 
Route::get('/faq', '[email protected]'); 
Route::get('/o-projekte', '[email protected]'); 

이것은 : 당신이 내 루트 파일에 얼마나 많은

사용 laravel 5.5

이것은을, 감사 action() 도우미 함수를 사용하여 지정된 컨트롤러 & 메서드를 가리키는 URL을 가져올 수 있습니다.

routes.php :

Route::get('/home', '[email protected]')->name('home'); 

HomeController.php : 당신이 첫 번째 방법을 사용하는 경우

class HomeController extends Controller { 
    public function index (Request $request) { 
     $url = action('[email protected]'); 
     // $url === 'http://www.example.com/home' 

     // OR 

     $path = $request->path(); 
     // $path === 'home'; 
    } 
} 

, 그런 다음 도메인을 제거하기 위해 request() 도우미 (또는 Request 인스턴스)를 사용할 수 있습니다 문자열에서 :

$url = str_replace(request()->root(), '', $url); 
1

, 당신은 그냥 경로 매개 변수를 사용하여 하나 개의 경로를 선언해야 예를 들어 매개 변수 :

,536,913 : 그래서 지금
public function index($slug) 
{ 
    var_dump($slug); 
} 

, 당신은 다음과 같은 것을 사용 요청을 할 수
http://example.com/faq // for faq page 
http://example.com/contact-us // for contact page 

따라서 $slug에는 faq/contact-us 등이 포함됩니다.하지만이 경우에는 http://exampe.com/home과 같은 동적 경로가 슬래그와 비슷하므로 동적 경로 ({slug}과 함께 하나) 앞에 home 경로를 선언하면 [email protected]이 호출되므로 , 당신은 예를 들어, 부모 네임 스페이스에서 슬러그와 동적 경로를 선언, 그래서

Route::get('/static/{slug}', '[email protected]'); 

을 쉽게 경로를 차별화 또는 슬러그 매개 변수를 사용하여 동적 경로를 선언하고 경로 선언의 경우 제약 조건을 추가 할 수 있습니다 경우 그 슬러그로 미리 정의 된 정적 페이지가 있습니다. Here is a somewhat similar answer, 도움이 될 수 있습니다. 또한 route constraints에 대한 자세한 내용을 확인하십시오.

업데이트 : 당신은 또한 같은 것을 사용하여 경로 제약 조건을 추가 할 수 있습니다 다음

http://example.com/faq 
http://example.com/contact 
http://example.com/something