2

У меня есть корзина для покупок, в которой я хотел бы передать переменное количество дополнительных параметров. Такие вещи, как: сортировка по, фильтровать, включение/исключение и т.д. Таким образом, URL может быть:Могу ли я иметь переменное количество параметров URI или пары ключ-значение в Laravel 4?

/products 
/products/sort/alphabetically 
/products/filter/cloths 
/products/socks/true 
/products/sort/alphabetically/socks/true/hats/false/ 

Etc.

Я полагаю, я мог бы маршрут с заполнителями для всех возможных параметров и установить значения по умолчанию в URL, так что-то вроде:

Route::get('products/sort/{$sort?}/filter/{$filter?}/socks/{$socks?}/hats/{$hats?}/...', function($sort = 'alphabetically', $filter = false, $socks = true, $hats = true, ...) 
{ 
    ... 
}); 

Тогда, например, чтобы просто исключить шляпы я должен был бы иметь URL следующим образом:

/products/sort/alphabetically/filter/false/socks/true/hats/false 

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

ответ

4

Вы должны использовать строку запроса (параметры GET) для таких фильтров. При использовании строки запроса параметры могут быть в любом порядке и могут быть легко пропущены, если они не нужны. Кроме того, очень легко сделать простую форму (с method="GET"), который может фильтровать список

С параметрами Получить URL будет выглядеть как:

/products 
/products?sort=alphabetically 
/products?filter=cloths 
/products?socks=true 
/products?sort=alphabetically&socks=true&hats=false 

параметры GET могут быть извлечены индивидуально с Input::get('name', 'default') или, как коллекция с Input::all(). Это также то, как страница будет добавлять номер страницы к вашим ссылкам.

+0

Да, это то, что я закончил делать. Спасибо за такой тщательный ответ, хотя! – Beau