2016-08-22 4 views
2

私は、次のルートを持っている:ルートからパラメータを取得しますか?

Route::get('news', [ 
    'as' => 'news', 
    'uses' => '[email protected]', 
]); 

同じリソースコントローラを使用する他のルートは、もあります。例えば:

記事コントローラで
Route::get('travel', [ 
    'as' => 'travel', 
    'uses' => '[email protected]', 
]); 

、どのように私は記事のカテゴリを取得することができます。例えば旅行やニュース?

経路パラメータに変換することはできません。

Route::get('{travel}', [ 
    'as' => 'travel', 
    'uses' => '[email protected]', 
]); 

連絡先やfaqなどの他のセクションには、記事管理者を使用しないものがあります。

私は私は1つの経路上のすべてを置くことを知っている:

Route::get('/article/{category}', [ 
    'as' => 'travel', 
    'uses' => '[email protected]', 
]); 

しかし、私のようなプリティURLたい:

Route::resource('news', ArticleController'); 
:私は、リソースコントローラを使用することができれば理想的

mydomain.com/category-slug/article-slug 

配列の種類:

Route::resource(['news', 'travel'], ArticleController'); 

だから私の質問:

  1. はどのようにして、リソースの名前を取得することができます。例えばニュース、私のコントローラーの旅?

  2. 同じリソースにさまざまなルートを指定する簡単な方法はありますか?そのようなルートを達成するために

+1

動的ルートの上に静的なルートを置く – rahul

答えて

4

ので、彼らは紛争 ルート間のデモのルートを取得することはありません制限され、一意である必要がありますあなたの静的ルートとして、このようなあなたのルートを保持:

Route::get('contact', [ 
    'as' => 'contact', 
    'uses' => '[email protected]', 
]); 

Route::get('{travel}', [ 
    'as' => 'travel', 
    'uses' => '[email protected]', 
]); 
+0

これはうまくいかないため、getIndex関数は2つのルートを区別できません。さらにルートチェックを除いて –

+0

@MinaAbadir私はちょうど動的ルートを最後に保つだけで、アイデアを与えました。機能名については特定しませんでした。私の意図は – rahul

+0

私はあなたの視点を理解しています。私はちょうど答えの問題を指摘しています。 –

1

mydomain.com/category-slug/article-slug 

は、次を使用します。

Route::get('/{category}/{article}', '[email protected]'); 

次に、あなたのコントローラでは、あなたのgetArticle方法で2つのパラメータを持つことになります。例については

public function getArticle($category, $article) 
{ 
    //Your code here 
} 
0

するために、あなたがいくつかのステップを行う必要があるかなりのURLを持っています:
1) 最初にあなたの記事テーブルに列を追加する必要があります例えば 'slug' 。
2)次に、記事モデルにルートキーを指定する必要があります。あなたはユニークであるために、独自でスラグを作成する必要があります記事を追加すると
Articleモデル

public function getRouteKeyName() 
{ 
    return 'slug'; 
} 

3):このように。あなたのコントローラで、このコードを追加する記事を作成します。

$slug = str_slug($article['title'], '-'); 
$slugs_count = DB::table('articles')->where('name',$article['title'])- >count(); 
if($slugs_count>1){ 
    $slug = $slug.'-'.($slugs_count-1); 
} 
$article->slug = $slug; 
$article->update(); 

4)今、私たちは、あなたが使用したい場合は、

$article = Article::where('slug','=',$slug)->first(); 

を必要とする記事を得るために最後に)

Route::get('/article/{slug}', [ 
    'as' => 'travel', 
    'uses' => '[email protected]' 
])->where(['slug','[\w\d\-\_]+']); 

5ルートを設定する必要がありますあなたのルートでより多くのパラメータを渡し、あなたのコントローラでそれを操作することができます。このように

Route::get('/article/{category}/{slug}', [ 
    'as' => 'travel', 
    'uses' => '[email protected]' 
])->where(['slug','[\w\d\-\_]+','category','[\w\d\-\_]+']); 

where句は、パラメータをいくつかの正規表現(オプション)で制限することです。 あなたのモデルのroutekeynameはlaravel 5.2で動作することに言及していません。

関連する問題