Laravel Модуль для работы со слагами (красивыми URL)

Alexey Mezenin

Новичок
https://github.com/alexeymezenin/laravel-russian-slugs

Пакет для Laravel 5, который позволяет повысить удобство работы со слагами (slugs). Пакет позволяет работать как с транслитом 'kak-vyrastit-derevo', так с кириллическими слагами, подобными тем, что используются на сайтах Wikipedia и Google 'Как_вырастить_дерево'. Другого пакета, который позволил бы работать с последними, я не нашел.

Плюсы таких адресов:

  • Лучше подходят для SEO. Правила транслита у Яндекса и Гугла отличаются настолько, что создать единые правила транслита, который бы одновременно видел как Google, так и Яндекс - невозможно. URL вида 'Как_вырастить_дерево' одинаково хорошо воспринимаются как Google, так и Яндексом.
  • Отлично подходят для .рф сайтов: 'доставкапиццы.рф/способы_оплаты' выглядит куда приятнее, нежели 'доставкапиццы.рф/sposoby-oplaty'.

Процесс создания слагов автоматизирован, насколько это возможно.

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

Документация на русском здесь. Документация на английском тоже есть, на всякий случай.

Надеюсь, что кому-нибудь пригодится пакет. Отзывы, конструктивная критика, советы и коммиты приветствуются.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Трейт для урлов в моделях? Какое... оригинальное решение.
Ну и нет явного способа эти слаги в еще маршрутах разобрать, а не уже в контроллере.
Для кириллицы был https://github.com/jbroadway/urlify
 

Alexey Mezenin

Новичок
Трейт для урлов в моделях? Какое... оригинальное решение.
Вы бы как сделали?

До создания своего пакета пробовал пользоваться тремя популярными забугорными, в двух из них (в том числе и самым популярном, расхвалленым W. Jason Gilmore, например) использовался трейт.

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

Обертки для Laravel нет. Многие не умеют писать, кому-то лень. К тому же не уверен, что этот пакет умеет работать с "такими_url", вижу только что работает с "takimi_url".
 
Последнее редактирование:

флоппик

promotor fidei
Команда форума
Партнер клуба
@флоппик, ну хранить же их надо там? Думаю тут все норм.
Ок, переименовали статью (исправили опечатку, например), хранишь с моделью — оставишь нерелевантный слаг или потеряешь ссылки?
Хранить историю слагов все равно придется.
Где будешь хранить слаги для тегов? Для категорий? С какой моделью?
 

Alexey Mezenin

Новичок
Ок, переименовали статью (исправили опечатку, например), хранишь с моделью — оставишь нерелевантный слаг или потеряешь ссылки? Хранить историю слагов все равно придется.
Опечатку в URL? В этой ситуации все будет абсолютно также, как со стандартными слагами. Хочется историю изменения URL - придется лепить, также как и в случаях со стандартными слагами Laravel и со слагами всех известных мне пакетов.

В таких случаях используют .htaccess со списком 301 редиректов, либо перед выкидыванием 404 страницы проверять список, вытянутый из БД. Но это точно нельзя делать в пакете или контроллере, потому что в приложении могут быть сотни контроллеров, не лепить же в каждый проверку старых URL.

Где будешь хранить слаги для тегов? Для категорий? С какой моделью?
В Laravel создаются отдельные модели для тегов, категорий и пр. Например, если статья использует тэги, то создается модель с тэгами и статьи и тэги соединяются с помощью свзяи many-to-many.
 
Последнее редактирование:

MiksIr

miksir@home:~$
Я как-то в одном проекте шел другим путем. Эти урлы... пардон, слаги ;) хранил отдельно в единой таблице со ссылкой на модель. И единая точка входа, которая на базе модели выбирала экшн контроллера. В этой точки входа и редиректы от переименований делались.

Зато сгенерить sitemap - один запрос в базу ;) ну почти
 
Сверху