Это правильный способ добавить фильтрацию?

Моя индексная / целевая / домашняя страница отображает все изображения из моей таблицы изображений с новейшими отправленными вверху. Думаю добавить фильтрацию по:

  1. Добавление элементов <a> с URL-адресами типа www.domain.com/hot и www.domain.com/trending.

  2. Создание моего домашнего маршрута Route::get('/', 'PagesController@index')->name('home'); с дополнительным параметром, например Route::get('/{filter?}', 'PagesController@index')->name('home');

  3. На основе необязательного параметра я отправлю в представление другую переменную $ images:

    public function index($filter){
        if ($filter == 'hot') {
            $images = hot images;
        } else if ($filter == 'trending') {
            $images = get trending images;
        } else {
            $images = Image::orderBy('created_at', 'desc')->get();
        }
        return view('home', ['images' => $images]);
    }
    

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

Это правильный способ создания фильтрации? Есть ли лучшие способы сделать это?

оператор переключения было бы лучше

Salman Zafar 03.08.2018 14:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, вы захотите использовать оператор switch, чтобы все было красиво и аккуратно.

   switch($filter) { 
     case 'hot'     : $images = hot images;break;
     case 'trending': $images = get trending images;break;
     default        : $images = Image::orderBy('created_at', 'desc')->get();
   }

Если вы хотите сделать его более управляемым, вы можете выбрать массив, в котором вспомогательный код ищет правильный метод для вызова с помощью метода $object->{variable with string}() для динамического доступа к этой функции.

Когда вы добавляете новые элементы в массив, вам нужно только сделать, например, метод предоставления и запись массива 'newest' => 'getNewestImages',.

private $image_getters = [
       'hot' => 'getHotImages',
       'trending' => 'getTrendingImages',
   ];

   public function index($filter)
   {
        $images = $this->getImages();
        return view('home', ['images' => $images]);
   }

   protected function getImages($filter) 
   {
        if (array_key_exists($filter, $this->image_getters)) {
            $getter = $this->image_getters[$filter];
            $images = $this->{$getter}();
       }
       else {
            $images = Image::orderBy('created_at', 'desc')->get();
       }
       return $images;
   }

Но кроме этого, это правильный способ добиться этого?

Bobimaru 03.08.2018 14:47

@Bobimaru Я добавил пример того, как я бы сделал это, чтобы все было управляемо, с помощью только одного массива для обновления, если есть новый получатель.

Tschallacka 03.08.2018 14:50

Другие вопросы по теме