Shelderr
@Shelderr

Как отобразить slug вместо id в URL?

Здравствуйте! Есть статьи, к каждой из них я сформировал slug и записал в бд с помощью str_slug(). Как вместо site.dev/news/1 сделать site.dev/news/slug_url. И можно это сделать без использования различных пакетов?
web.php
Route::post('news','ArticlesController@store');
Route::resource('news',"ArticlesController",
    ['except' => ['show']]);
Route::get('news/{slug?}', 'ArticlesController@show');

ArticlesController
public function show($id)
    {
        $article = Article::findOrFail($id);
        return view('articles.show', compact('article'));
    }
 public function store(ArticleRequest $request)
    {
        $input = $this->imageArticleRequest($request);
        Auth::user()
            ->articles()
            ->create($input);
        session()->flash('flash_message', 'Статья успешно создана');
        return redirect('news');
    }
 protected function imageArticleRequest($request)
    {
        if ($request->hasFile('article_wall')) {
            $image = $request->file('article_wall');
            $imageName = time() . "." . $image->getClientOriginalExtension();
            $savePath = public_path('/uploads/articleImages/' . $imageName);
            Image::make($image)
                ->save($savePath);
            $input = $request->all();
            $input = array_except($input, 'pathName');
            $input['article_wall'] = $imageName;
            $title = $input['title'];
            $input['slug'] = str_slug($title);
            return $input;
        }
    }
  • Вопрос задан
  • 1852 просмотра
Решения вопроса 1
UksusoFF
@UksusoFF
Нужно внимательно прочитать этот раздел документации: https://laravel.com/docs/5.5/routing

routes/web.php:
Route::get('news/{article}', 'ArticlesController@show');

RouteServiceProvider:
public function boot()
{
    parent::boot();

    Route::model('article', App\Article::class);
}

ArticlesController:
public function show(App\Article $article) {
//
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@anlamas
https://laravel.com/docs/5.5/routing#implicit-binding
public function getRouteKeyName()
{
    return 'slug';
}
Ответ написан
Комментировать
zacompom
@zacompom
WordPress Expert / WordPress Themes Developer
Как сделать такую ссылку:
Http://domen.ru/slug-category/slug-post.html ???
Может кто помочь?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы