Генерация слага для товара

Ко мне поступил заказ на разработку интернет-магазина.
Вариантов реализации — великое множество. Для WordPress плагин Woocommerce, Magento( не самый легковесный вариант ), Prestashop и другие движки для разработанные данной цели.
Но стандартно разработанные не могли удовлетворить «капризности» заказчика.
И в условиях была информация, что товаров будет порядка 100к записей, плюс к этому ежедневный импорт из прайсов несколько раз в день.
Поэтому я смело отмел все стандарты, и решил разработать продукт на Laravel.
Помимо, прочих «хотелок», нужно было реализовать ЧПУ (человеко-понятные урлы) для товара. Т.е. генерировать слаг.
Что здесь сложного спросите вы?
Ничего особенного, кроме того, что этот слаг должен состоять из бренда, модели, размерностей и параметров, которые очень схожи между собой и будущий слаг не будет уникальным, а значит ничего хорошего из этой затеи не выйдет. Ведь прописывая таблицу товара в поле slug такое неуникальное значение, можно найти не тот товар, который нужен, а первый попавшийся.
Выход я нашел следующим способом: составил слаг вида бренд-модель-параметр1-параметр2-ID.
Где ID — это уникальный код товара в таблице.

Таким образом ссылка на страницу товара выглядела

<a href="{{$item->brandname}}-{{$item->modelname}}-{{$item->p1}}-{{$item->p2}}-p{{$item->id}}">Бренд Модель параметры</a>

.

Маршрут самый заурядный

Route::get('/items/{id?}', ['uses' => 'ItemController@getSingle']);

В методе контроллера, который обрабатывает этот запрос стоит простое регулярное выражение

preg_match("/[0-9]+$/", $r->id, $output_array);

где $output_array[0] — и будет ID нашего товара и уже этот ID после всех проверок, мы можем использовать как нам нужно.

На этом все.
Спасибо за внимание!

4 Replies to “Как создать RESTful API Laravel

  1. После попытки логина выдает ошибку в концоли..

    curl -X POST http://work.back/api/login -H «Accept: application/json» -H «Content-type: application/json» -d «{\»email\»: \»john.doe@toptal.com\», \»password\»: \»toptal123\» }»

    Ошибка.
    {
    «message»: «Class App\\Http\\Controllers\\Auth\\Request does not exist»,
    «exception»: «ReflectionException»,
    «file»: «/home/batis/project/worktimebackend/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php»,
    «line»: 25,

    1. Прошу прощения.
      Статья переведена. Тут скорее вопрос автору.
      Но, как говориться спасибо за сигнал.
      Обкатаю на своем сервере этот код. Интересно.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *