Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting

Логика написания контроллеров Laravel?

Всем привет!

Начал изучать Laravel и столкнулся с проблемой, я не понимаю, как правильно сообщать контроллеру на какой именно странице мы находимся...

1. Допустим имеется 10 страниц одинакового формата, но с разным контентом (берется из БД), то как именно передать данные о настоящей странице контроллеру, чтобы он понял, какой именно контент из БД подтягивать? Предположу, что так:
1.1. Если у нас используются ссылки формата site.ru/article.php?id=1, то в контроллере ловим GET id=1 и по нему узнаем, что нужно подтянуть из БД данные страницы с id == 1 ?
1.2. Если у нас используются ссылки ЧПУ формата site.ru/article-monkey-1, то в контроллере ловим GET с текстом 'article-monkey' > ищем в БД в колонке url 'article-monkey' и если такая имеется > получаем данные этой страницы? Ну а если такого url не найдено, то редирект на 404 страницу?

2. Если у нас используются ссылки ЧПУ формата site.ru/article-monkey-1/article-monkey-2, то:
2.1. В контроллере ловим GET с текстом 'article-monkey-2'.
2.2. Ищем в БД в колонке url > 'article-monkey-2' и если такая имеется, то.
2.3. Смотрим в БД в колонке page-parent (страницы 'article-monkey-2') > id родительской страницы и если родительская страница имеет url 'article-monkey-1', то.
2.4. Получаем данные этой страницы. Ну а если любого из указанных url не найдено или id родителя не верен, то редирект на 404 страницу.

Заранее огромное спасибо за все комментарии!

P.S. вероятно, этот вопрос относится ко всем фреймворкам, а не только конкретно к Laravel, но возможно в Laravel используется какой-то другой механизм работы с контроллерами (в контексте моего вопроса), о котором я даже не догадываюсь...
  • Вопрос задан
  • 185 просмотров
Решения вопроса 1
solotony
@solotony
покоряю пик Балмера
если брать laravel, то за определение "на какой странице мы находимся" ответственен роутинг.

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

например у тебя есть страницы page1, page2, page3, page4 причем page2, page3 - дочерние для page1, а page4 - дочерняя для page3

вычисленные URL будут page1, page1/page2, page1/page3, page1/page3/page4

а в роутинге ты просто описываешь get('/prefix/{slug}')

например так:

Route::get('/p/{slug}', ['as' => 'page_by_slug', 'uses' => 'FrontController@page_by_slug'])->where('slug', '[A-Za-z0-9][A-Za-z0-9/_-]+');

а это для чисел

Route::get('/~{id}', ['as' => 'page_by_id', 'uses' => 'FrontController@page_by_id']);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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