@GaserV

Кто поможет разобраться с роутами в laravel?

Ребят. Подскажите пожалуйста. Вот у меня след. ситуация. При /portfolio, у меня возвращается вьюха portfolio. Теперь же, мне нужно сделать проверку как-то, то ли че, чтобы если при url 'portfolio/logos, portfolio/web' у меня возвращалась вьюха portfolio, но при этом произвелась выборка работ из БД по названию категории, т.е. в примере "web","logos" и вывести эти работы...

А если url /portfolio/work-name, где "work-name" название работы, выводилась другая вьюха, например "work"?

Сейчас дела обстоят так:
У меня три роута(ниже). При /portfolio возвращается вьюха с portfolio. Но. Если /portfolio/work-name то он пытается мне вернуть страницу с работами, соответствующей категории, хотя нужно чтобы вернул страницу с выводом одной работы.

И такой вопрос еще. У меня в колонке "categories" в бд хранится от одной до нескольких категорий, вида "cat1, cat2, cat3" и т.д. Как быть в таком случае? Как правильно вернуть работы соответствующей категории?

Три роута:

Route::get('/portfolio', 'VendorPageController@portfolio'); //должна вернуться страница со всеми работами

Route::get('/portfolio/{category?}', 'VendorPageController@portfolio'); //должна вернуться страница с работами, соответствующей категории.

Route::get('/portfolio/{work?}', 'VendorPageController@portfolio'); //должна вернуться работа


Контроллер:
public function portfolio($category = null)
	{

        if(is_null($category )) {
            $portfolio = Works::paginate(10);
        } 
        else {
            $portfolio = Works::where("categories", $category )->get();
            return view("portfolio", compact('portfolio'));
        }
        return view("portfolio", compact('portfolio'));

	}
  • Вопрос задан
  • 381 просмотр
Пригласить эксперта
Ответы на вопрос 3
vollthegreat
@vollthegreat
Laravel back-end outsource
Поставь отдельно? 'portfolio/logos и portfolio/web' над /portfolio/{work-name}.
и пропиши в контроллере отдельный функции для первых двух, для ворк-нейм свою.
Ответ написан
@assets
Back-end developer
Создай гет роут /portfolio/{work-name}.

<?php 
  public function getPortfolio($catergory = null) {
     
       if(is_null($catergory )) {
          // default portfolio
           $portfolio = Portfolio:all();
        } else {
           // many portfolio
           $portfolio = Portfolio::where("catergory", $catergory )->get();
        }
           return view("portfolio", compact('portfolio'));
  }
?>


Примерно так.
При выборе logos передавай данные на вьюху с данными из БД , и с другими так же.
Ответ написан
wielski
@wielski
✔ Совет: Вам помогли? Отметьте ответы решением.
Используйте "магический" знак ?

Route::get('/portfolio/{category?}', 'PortfolioController@index');


Соответственно, в контроллере

public function index($catergory = null){
        if(is_null($catergory )) {
               $portfolio = Portfolio:paginate(10);
        } else {
               $portfolio = Portfolio::where("catergory", $catergory )->paginate(10);
        }
        return view("portfolio", compact('portfolio'));
}
Ответ написан
Ваш ответ на вопрос

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

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