@FeNiX1996l

Как правильно составить структуру урлов веб-сайта (блога или интернет-магазин)?

Здравствуйте. Делаю админку на Laravel 5.5. Пока доделал почти для блога.
Есть страницы, при создании страницы можно выбрать: просто страница, или страница для записей, ну и понятное дело slug и еще куча всего:)

Так же есть ЗАПИСИ, при создании записи можно выбрать куда эта запись уйдет(может уходить только на страницы, которые предназначены для записей)

А теперь сам вопрос:)

Как организовать структуру урлов?
К примеру сейчас у меня имеется один котроллер ContentController. В нем я через explode разбиваю урл и обращаюсь к последнему элементу, к примеру test.ru/calendar/post_1

//разбивает url на массив
  $content = explode('/', $slug);

   //Берет последний элемент массива
  $end_slug =  end($content);

//Если размер массива равен 1 то ищем в модели Pages
if(count($content) == 1){

}
//Если нет, т.е. урл состоит test.ru/calendar/post_1 то ищем в модели Posts
else{

}


Нормально ли так писать?:) Возможно это ужасный код...и я хочу услышать совета, как лучше организовать структуру вот самих урлов. Т.к. к примеру появиться сюда в админку еще интернет магазин, а там категории, подкатегории, бренды и т.д. и это будет очень громоздко.

Писать урлы типа:
test.ru/pages/page_1
test.ru/posts/post_1
test.ru/category/book/book_1

не сильно хочу, т.к. это не красиво и сбивает.

Что подскажите? Или может где-то почитать?
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 1
neuotq
@neuotq
Прокрастинация
Итак, в /routes/web.php :
//Главная
Route::get('/', 'FrontController@index')->name('front.index');
//Здесь выводим список постов
Route::get('/posts', 'FrontController@showPosts')->name('front.posts');
//Здесь показываем конкретный пост, если у тебя имяя не уникальное, то тогда лучше используй id
Route::get('/posts/{post_name}', 'FrontController@showPost')->name('front.show_post');


Где-то в /app/Http/Controllers/FrontController.php
public function showPost($post_name)
    {
    $post = Post::where('name', $post_name)->first();
   return view('front.post',compact(['post']));
}


Это пример конечно "грязный" , но суть +/- такая. Так же можно добавлять в роутере условия для дополнительной фильтрации, к примеру если ты будешь делать урл типа : example.com/post-1 , то:
//Здесь показываем конкретный пост, если у тебя имяя не уникальное, то тогда лучше используй id
Route::get('/post-{post_id}', 'FrontController@showPost')->name('front.show_post')->where(['post_id'=>'[0-9]+']);;

После этого кода, что-то типа example.com/post-rtata - уже вернет 404. А вообще читай документацию
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы