2016-08-22 3 views
2

У меня есть следующий маршрут:Получить параметр с маршрута?

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

Есть и другие маршруты, которые используют один и тот же контроллер ресурсов, например:

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

В контроллере статье, как я могу получить категорию статей , например путешествия или новости?

Я не могу превратить его в параметр маршрута, например.

Как есть другие разделы, такие как контакты, faqs и т. Д., Которые не используют контроллер товара.

Я знаю, что я мог бы поставить все это на одном маршруте:

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

Но я хочу довольно URLS как:

mydomain.com/category-slug/article-slug 

В идеале, если я мог бы использовать контроллер ресурса:

Route::resource('news', ArticleController'); 

С помощью какого-либо массива:

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 не сможет отличить два маршрута. За исключением дальнейших проверок маршрута –

+0

@MinaAbadir Я только что дал идею, а не конкретную информацию о названии функций, просто сохраняя динамический маршрут, наконец, было мое намерение – rahul

+0

Я понимаю вашу точку зрения. Я просто указываю на проблему с ответом. –

1

Для достижения маршрута подобного:

mydomain.com/category-slug/article-slug 

Используйте следующее:

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

Тогда в контроллере, вы будете иметь 2 параметра в методе getArticle.

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

Для того, чтобы вам нужно сделать несколько шагов:
1) Прежде всего, вам нужно добавить столбец в таблицу статей, называемую, например, 'slug' ,
2) Тогда вам нужно указать ключ маршрута в своей модели товара.Как это:
Статья модель

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) Теперь мы должны установить маршрут

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

5) Наконец, чтобы получить статью вам нужно

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

Если вы хотите использовать категорий и т. д. вы могли бы передать больше параметров на своем маршруте и манипулировать им в своем контроллере. например,

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

Предложение where должно ограничивать параметр некоторыми регулярными выражениями (необязательно). Я забыл упомянуть, что имя маршрута в вашей модели работает в laravel 5.2.

Смежные вопросы