Sef url что это
Что такое SEF в Joomla?
В Joomla и в других CMS встроена функция генерации ЧПУ (человекопонятные УРЛ). Оригинальное английское название таких ссылок — SEF-URL (search engines friendly url).
Интересно, что в русском названии акцент делается на понятности ссылки человеку, а в английском — на дружественость поисковым роботам.
Данная функция позволяет автоматически преобразовывать ссылки в сайтах из динамического вида:
Первый тип SEF-ссылок в Joomla CMS создаются встроенным компонентом.
Последние SEF-ссылки на русском языке можнораньше можно сгенерировать с помощью sh404SEF но только при условии использования UTF-8 на сайте.
Да. С использование кодировок UTF-8 и тем, что браузеры и поисковые системы научились читать русские символы, вебмастерам дается громадный инструмент для помощи пользователям искать информацию в интернете.
Помимо явной красоты ссылок, ЧПУ ссылки дают хороший SEO эффект. Допустим страница моего сайта, имеет заголовок «Создание сайтов», а SEF ссылка
И все таки мой сайт вылезет в ТОП-10 по этому запросу, то ключевая фраза будет подчеркнута не только в снипите, но так же и в ссылке, ведущее на мой сайт. Наверно SEFвсе таки влияют на выдачу. Как сказать не могу. Но работает.
Начало работы с SEF
У вас есть сайт и Вы хотите сделать SEF ссылки. Но для начала давайте расомтрим основные вопросы, которые задают все начинающие.
Вопрос: Создают ли SEF компоненты повышенную нагрузку на сервер?
Ответ: Если посещаемость превышает 300-400 хостов в день, то сторонние SEF компоненты создают повышенную нагрузку на сервер, вплоть до 40-60%. И соответственно, если ваш сайт находится на хостинге у какого-нибудь провайдера, а не на выделенном сервере, то это может привести к блокированию аккаунта по причине превышения допустимой процессорной мощности. Обычно она составляет не более 10%. Проверенно жизненным опытом.
Но есть два решения — включить стандартный SEF или включить sh404SEF с использованием метода создания SEF ссылок без использования htaccess (index.php).
Вопрос: Что необходимо для работы SEF компонентов?
Ответ: Для работы необходима поддержка сервером функции mod_rewrite. К сожалению, еще встречаются хостинги у которых отключена функция апача такая, как mod_rewrite. Без нее вы сможете видеть только 500 или 404 ошибки.
Или использовать sh404SEF без использования htaccess (index.php).
Вопрос: У меня сайт уже давно живет в сети, и если я включу SEF страницы из индекса поисковых систем выпадут?
Ответ: Нет. Страницы не выпадут, так как SEF компоненты все работают через redirect 301. Redirect 301 — это инструкция, говорящая что страница перемещена на новый адрес. Соответственно по мере обхода поисковыми роботами сайта, все ссылки в индексе будут изменены на новые SEF урлы. Выпадения не будет.
Выбор SEF компонента.
Тут надо исходить из того что вам надо, если нужны простые SEF ссылки, то конечно стоит включить стандартный SEF компонент и не мучиться.
Если вы хотите получить красивые SEFссылки для Joomla 1.5, то выбор падет между ArtioSEF и sh404SEF. В Joomla 3 уже не потребуется использовать сторонник компоненты для SEF. Сравним только некоммерческие продукты.
Стандартный SEF
ArtioSEF
Хороший компонент, но минусов у него очень много.
Sh404SEF
Это SEF компонент заслуживает большого внимания.
Из общего обзора становится видно, что у всех трех компонентов есть один общий минус. Возможность дублирования ссылок.
На этом, краткий урок о SEF ссылках заканчиваю.
Здравствуйте дорогие гости и постоянные читатели блога о создании сайтов – Site on! В одной из предыдущих статей этого раздела я обещал вам рассказать, как всего за пару минут можно создать собственные ЧПУ ссылки. Несмотря на то, что статья может показаться вам объёмной, а для некоторых и сложной – я надеюсь, когда дочитаете её до конца, вы согласитесь, что в создании ЧПУ действительно нет ничего сверхъестественного.
Что такое ЧПУ?
ЧПУ – это исковерканная англоязычная аббревиатура SEF URL (search engines friendly url). Она обозначает адреса ссылок, которые дружелюбны для поисковых систем. О ЧПУ я также писал в статье про внутреннюю оптимизацию сайта. В русскоязычном варианте SEF URL пишется как ЧПУ – человеко-понятные url. Что всё это значит? Это значит, что адреса ваших ссылок будут иметь осознанный текст, а не технический мусор, за примером можете сходить по ссылке выше.
Какие преимущества дают SEF URL?
Во-первых, очевидно, что ЧПУ ссылки уже в самом своём адресе могут содержать полезную для пользователя информацию. Из такого адреса сразу понятно, о чём будет статья или страница в целом.
Во-вторых, SEO. Такие ссылки приветствуются поисковыми системам, пару лет назад они могли бы дать вам значительный перевес над конкурентами. Сегодня подобные ссылки являются само собой разумеющимися, сейчас редко встретишь сайты с не ЧПУ ссылками, однако они до сих пор есть.
В-третьих, это престиж. Когда я захожу на сайты, где вместо понятного и красивого адреса в ссылках содержится разного рода мусор, а то и засекреченная информация – я задаюсь вопросом: «Вроде бы приличный сайт, но почему разработчики не сделали ЧПУ? Неужели это было так сложно? Может им настолько нет дела до подобных вещей или просто не хватает знаний и навыков?». В общем, для меня такие сайты большая загадка.
В-четвёртых, безопасность. Сайты с ЧПУ ссылками не содержат в своём адресе техническую информацию переданную методом GET (уроки PHP), которую можно запросто использовать для взлома сайта.
И последнее: ЧПУ – как средство навигации. Если ссылка понятна пользователю, то он сам может переходить по разделам сайта, просто редактируя ваш URL. Например:
Если удалить из данной ссылки её последнюю часть (2-sublime-text-2), то мы попадём в раздел, к которому относится данная статья:
В данном случае это раздел «Инструменты». То есть благодаря SEF ссылкам мы можем построить понятную людям и роботам иерархию нашего сайта, что опять-таки будет полезно и для посетителей и для продвижения в поисковых системах.
Недостатки ЧПУ ссылок
Первое: возможно, вам придётся повозиться и даже помучаться, чтобы их настроить или вовсе сделать с нуля.
Второе: ваш сайт станет дольше грузится, а именно, на пару десятитысячных секунды 🙂 Это связано с тем, что для работы ЧПУ подключается специальный модуль веб-сервера Apache – mod_rewrite, которому понадобится это «огромное» количество времени на обработку ссылок.
Когда ЧПУ не нужны?
ЧПУ ссылки могут быть и лишними, например, если у вас закрытый корпоративный портал, где вся работа осуществляется только авторизованными пользователями, а для всех остальных, в том числе и для поисковых роботов доступ закрыт.
Также ЧПУ будет излишеством в back-end вашего сайта, то есть в панели администратора.
Что ещё нужно знать о ЧПУ?
Во всех актуальных версиях CMS данная проблема уже решена. Всё что вам нужно, чтобы сделать ЧПУ ссылки, это лишь включить соответствующие настройки в движке вашего сайта.
Но что если мы имеем дело с сайтом на чистом PHP, без CMS, или же хотим разработать свою собственную CMS в которой хотим сделать SEF URL? Для подобных случаев, а также для людей, которые хотят углубиться и понять всю суть преобразований обычной ссылки в ЧПУ, я и написал остальную часть статьи. Если вы читали мои предыдущие статьи, то знаете, что мой блог как раз относится к этой категории, то есть сайтам, написанным с нуля на PHP, без использования готовых CMS.
Ах да, ещё один момент: из личного опыта не советую делать кириллических URL.
Коротко: в чём вся суть?
Пишу для тех, кто совсем не в курсе дел. Везде в наших тегах гиперссылки мы будем указывать ЧПУ адреса:
Суть в том, чтобы из красивого и понятного человеку URL (ЧПУ) сделать на лету URL, который будет полезен разработчику PHP (не ЧПУ):
При этом всем на свете (посетителям, поисковым системам, всем) будет видна именно ЧПУ ссылка, но мы как разработчики PHP будем знать, что таит в себе URL на самом деле. В конце статьи, для полного понимания, я покажу все этапы, как ЧПУ работают у меня на блоге.
Создание SEF ссылок с помощью mod_rewrite
mod_rewrite – это модуль веб-сервера Apache, предназначенный для перезаписи URL. Естественно, для начала работы вы должны включить этот модуль в настройках Apache, эти настройки находятся в файле httpd.conf, вам нужно будет раскомментировать строку с именем данного модуля. У 99% хостинг-провайдеров он включён, за исключением совсем ужасных хостингов. Кстати говоря, используя Denwer, у меня не получилось нормально настроить собственные ЧПУ, мне не захотелось долго искать в чём именно проблема (мешают собственные редиректы Денвера) и я установил Апач отдельно. Для тех, кто не знает, как установить сервер Апач не используя Денвер, я напишу инструкцию в одной из будущих статей. А здесь мы продолжаем разбирать наши ЧПУ.
Все наши правила преобразований URL записываются в небезызвестный файл .htaccess, который должен лежать в корне нашего сайта.
Для корректной работы mod_rewrite в нём обязательно должна быть написана следующая строка:
Правила и условия mod_rewrite
Где ^useful/([a-z]*) – это шаблон ожидаемого url,
а /index.php?category=useful&article=$1 – это то, во что мы его конвертируем, если пришедший URL подошёл под шаблон.
Для того чтобы наш обработчик, то есть mod_rewrite не срабатывал каждый раз без надобности, мы в RewriteRule указываем шаблон, которому должны соответствовать приходящие URL. Если URL не соответствует шаблону, то mod_rewrite просто не сработает и не преобразует пришедший SEF URL в URL, с которым мы можем работать.
То есть на данном этапе вам важно понять саму суть: в ЧПУ ссылках не передаются параметры, а без параметров мы не можем ничего сделать в PHP с этой ссылкой, поэтому с помощью mod_rewrite мы преобразуем ЧПУ ссылку без параметров в не ЧПУ ссылку с параметрами. Что такое параметры? В примере выше имеем 2 параметра:
Параметр category и параметр article.
Опять-таки обращаю ваше внимание, что про параметры вы уже должны были знать, я лишь вкратце вам напомнил.
В шаблонах мы можем использовать символы и символьные классы. Символ точки обозначает абсолютно любой символ.
Квантификаторы или кванторы
Все предыдущие примеры обозначали один символ (одну единицу), а что если мы хотим показать, что символов из этого промежутка [a-zA-Z] может быть не один, а сколько угодно. Для этого мы должны использовать квантификаторы:
Примером может послужить наша уже известная строчка:
В которой мы применили квантификатор (квантор) звёздочку (*) после класса символов [a-z]. Это значит, что в нашем URL после useful/ могут находиться символы от a до z в любом количестве и, естественно, в любой последовательности, а могут и не быть вовсе. Домен в счёт не берём, он подразумевается сам по себе.
Экранирование
Также при составлении шаблона не стоит забывать и про экранирование. Если вы хотите заключить в класс символов, например, символ точки, то вам нужно её заэкранировать, так как без экранирования точка (служебный символ) обозначает абсолютно любой символ:
Тоже самое касается и квадратных скобочек, они у нас обозначают класс символов, поэтому если в вашем url могут быть квадратные скобочки их нужно заэкранировать:
Ограничение начала и конца строки (маркеры)
Для того чтобы указать начало или конец строки, без учёта домена, используются символы:
То есть в нашем первом примере мы указали, что наш шаблон начинается именно с начала URL, а не откуда угодно (с середины, с конца):
Обращаю ваше внимание на то, что знак ^ внутри квадратных скобок обозначает отрицание, не путайте!
Обратные связи в mod_rewrite
$n – это наша «переменная» в круглых скобках, о них мы уже говорили. Работает для RewriteRule.
%n – то же самое, только в RewriteCond. RewriteCond мы ещё не рассматривали, он у нас впереди.
Итак, если RewriteRule – это наши правила преобразования URL, то RewriteCond – это условие, аналог if в PHP. RewriteCond нужно в ситуациях, когда вам необходимо выполнить URL преобразование (RewriteRule) только при выполнении какого-то условия.
У сервера есть свои собственные переменные, которые мы можем использовать в наших условиях RewriteCond:
Синтаксис применения серверных переменных таков:
Давайте составим наше первое условие:
Если посетитель зашёл с браузера Mozilla Firefox, то выполняем следующее правило. Как видите, в отличие от PHP мы не используем фигурные скобки для обрамления нашего правила, которое выполнится, если условие TRUE.
RewriteCond позволяет использовать операторы сравнения: (больше), = (равно). Также есть специальные значения, например:
Флаги
Вместо этого написать так:
Если нужно поставить одновременно несколько флагов, ставим их через запятую, например:
Как вы уже могли догадаться, mod_rewrite можно использовать не только для ЧПУ, но и для многих других интересный целей, например, клоакинга – это метод чёрного SEO, когда по одному и тому же адресу посетителям отдаётся одна страница, а поисковым роботам совершенно другая. Ну и под конец статьи, я покажу вам живой пример использования всего написанного выше и как же это всё работает взаимодействуя с нашим PHP.
Живой пример использования mod_rewrite
О том, как работает конструкция switch, я подробно писал в статье по указанной ссылке. Вот и всё, дамы и господа! Наконец-то наша статья подошла к логическому завершению, и теперь вы сможете попрактиковать полученные знания. Я прощаюсь с вами до выхода новой статьи, а напоследок хочу привести интересную цитату:
«Несмотря на тонны примеров и документацию, mod_rewrite это Вуду. Чертовски клёвый Вуду, но все-таки Вуду.»
ЧПУ в Joomla 3: создаём человекопонятные URL-адреса
Что такое SEF URL (ЧПУ)?
» >SEF URL (Search Engine Friendly URL, на русском сленге SEO-оптимизаторов: ЧПУ — «человекопонятные» URL) — URL-адреса, понятные типичным интернет-обывателям, далёким от сайтостроения.
1. Пример сложного и непонятного URL-адреса (не-ЧПУ):
Рядовому интернет-пользователю в данном адресе будет понятно лишь название домена: всё остальное воспринимается как непонятный набор символов, сложный для восприятия и запоминания.
2. Пример представленного выше URL в виде ЧПУ:
Данный адрес отлично воспринимается любым мало-мальски знакомым с интернетом пользователем и легко запоминается при необходимости.
Как сделать SEF URL-адреса (включить ЧПУ) в Joomla?
По умолчанию после установки Joomla на сайте не активированы ЧПУ-адреса. Для их включения достаточно активировать опцию Включить SEF (ЧПУ) (Система → Общие настройки, вкладка Сайт, раздел Настройки SEO) и сохранить изменения.
После этого все адреса страниц сайта станут «человекопонятными» (в порядке вложенности и без лишних символов), но в них по прежнему будет index.php после названия домена (например: http://www.domen.ru/index.php/news/welcome). Об этом смотрите следующий вопрос.
Как убрать index.php из URL в Joomla?
Для этого достаточно активировать опцию Перенаправление URL (Система → Общие настройки, вкладка Сайт, раздел Настройки SEO). Подробнее смотрите в инструкции Как убрать index.php из URL-адреса в Joomla.
Теперь все адреса страниц сайта приобретут понятный обывателям вид. Но внутренние страницы, которым не присвоен пункт меню, будут содержать номера идентификаторов, если не произведена соответствующая настройка.
Следует упомянуть, что система будет добавлять суффикс, соответствующий расширению файла (не обязательно .html).
Как сделать кириллические URL-адреса в Joomla?
URL-адреса в Joomla 3 и выше формируются на основании алиасов для материалов, категорий и пунктов меню, которые можно заполнять и изменять в панели управления при создании (редактировании) соответствующих страниц. По умолчанию Текст, применяемый в Joomla для создания «человекопонятных» URL-адресов (ЧПУ) для определённых элементов контента (пунктов меню, материалов, категорий и т. д).
Для генерации кириллических алиасов необходимо активировать опцию Алиасы в Unicode (Система → Общие настройки, вкладка Сайт, раздел Настройки SEO) и сохранить изменения:
После этого автоматическая транслитерация алиасов происходить не будет, однако создание алиасов с латинскими символами возможно при их ручном заполнении.
Как убрать ID материалов и категорий из URL в Joomla?
Адреса страниц всех вложенных материалов и категорий в Joomla по умолчанию включают номера идентификаторов этих страниц, если им не присвоен пункт меню.
Пример ЧПУ с идентификаторами:
Цифры 2 и 3 являются номерами идентификаторов категории и материала соответственно.
В Joomla 3 до версии 3.8 исключить идентификаторы из адресов можно только (без правки файлов ядра) при назначении страницам пункта меню.
В Joomla 3.8 появилась возможность отключать добавление ID к алиасам при формировании URL-адресов:
В результате все URL-адреса внутренних страниц сайта приобретут наилучший вид (без лишних символов, index.php и идентификаторов):
Всё о Joomla в одном месте
Joomla.center is not affiliated with or endorsed by the Joomla! Project or Open Source Matters. The Joomla! name and logo is used under a limited license granted by Open Source Matters the trademark holder in the United States and other countries.
Joomla!® является торговой маркой компании Open Source Matters inc в США и др. странах. Название Joomla! и его вариации используются в рамках ограниченной лицензии, определённой компанией Open Source Matters. Проект joomla.center не относится к компании Open Source Matters или проекту Joomla! Точки зрения представленные на данном сайте не являются официальными точками зрения Joomla Project или Open Source Matters. Торговая марка Joomla® и логотип используются в рамках ограниченной лицензии, предоставленной Open Source Matters.
ЧПУ (SEF URLs) в Symfony 3 — автогенерация slug, настройка и маршрутизация
Всем доброго времени суток!
Третьего дня мне понадобилось провести блиц вебинар на тему ЧПУ в Symfony. Вообще время вебинара у меня ограничено двумя часами, при этом я должен был рассказать еще и про автогенерацию CRUD функционала (scaffolding) в той же Symfony, и про простейший способ создать постраничность. Это создало проблему, так как я знаю как сделать ЧПУ «ручками», не прибегая к автоматизированным под эту задачу инструментам, но рассказ получился бы долгий и оказались бы затянутыми в обсуждение лишние темы. Поэтому я пошел спрашивать у Интернета как сделать все проще. И вот я оказался в той редкой ситуации, когда такая популярная платформа как Symfony не имеет банального обучающего материала на тему «ЧПУ в три клика». Смотрел так же и на английском языке, но там тоже пусто (может плохо искал — время было ограничено). В общем я справился с поиском разрозненного материала по данной теме, а так же со сбором его в единое повествование, так что почему бы не поделиться со всеми?
Терминология
Я не знаю кто будет читать мою статью, так что для начала разберемся в терминологии.
ЧПУ — аббревиатура от «Человекопонятные URL». На английский переводится как Friendly URL или Semantic URL. Однако чаще используется как аналогичная аббревиатура: SEF URLs — Search Engine Friendly URLs.
Самое очевидное — это то, что URL-ы вашего сайта будут понятны пользователю. Зачем, только, ему их читать? Большинство клиентов моих заказчиков даже не подозревают о наличии адресной строки браузера. Если есть сомнения, то посмотрите сколько результатов выведет запрос в Гугл «Где находится адресная строка браузера».
Однако есть неоспоримые плюс — правильно составленные ЧПУ являются одним из важных элементов SEO оптимизации, благодаря которой странички вашего сайта будут появляться в поисковике на первой странице. Для этого URL на вашем сайте должны содержать релевантную для поисковика информацию о страничках, на которые они ведут и иметь продуманную вложенность. Все это замечательно, но речь в этой статье не о SEO оптимизации. Предполагается, что вы уже решили получить ЧПУ на своем сайте и дополнительная мотивация вам уже не требуется.
ЧПУ URL-ы — это адреса страниц описывающие всю необходимую информацию о запрашиваемой у сервера странице в виде сегментов пути, то есть GET параметры в таком URL-е большая редкость.
Обычно можно найти шаблоны пути подобные таким:
http(s)://Домен/slug-категории/slug-подкатегории/slug-товара-или-статьи
http(s)://Домен/Профайл/slug-владельца-профайла
Тут появляется еще один термин — Slug, который важен для дальнейшего понимания статьи:
Slug — (из Викисловаря) альтернативная дружественная к восприятию человеком — буквенно-цифровая часть универсального адреса интернет-ссылки (URL) к рубрицируемому содержимому. То есть, если по простому, то slug заменяет всяческие признаки и id-шники ресурсов нашего сайта в URL-е на человекопонятный текст.
Кому и так ясно что-такое ЧПУ — мотаем дальше.
На примере сайта магазина rozetka.com.ua (первый сайт, который попался под руку). ЧПУ тут в зачаточном состоянии. Давайте попробуем их ссылки довести до ума вручную:
Я зашел на страницу «Мячи для настольного тенниса» и адрес в ее оказался:
rozetka.com.ua/t_balls/c81265
Явно, что «c81265» первым символом указывает на то, что запрашиваемый объект — категория товаров, а число после него — id категории в базе данных.
Переделав под ЧПУ у на получилось бы просто:
rozetka.com.ua/t_balls
Просто удалили id-шник? Как же так? А как же контентные страницы (http://rozetka.com.ua/contacts/)?
Да никаких проблем. Просто поставьте все контентные страницы, так чтобы текущий путь в запросе сверялся в первую очередь с ними. В Symfony это делается всего лишь тем, что маршруты для этих путей объявлены первыми.
Если и так не получается или у вас на сайте есть еще что-то важное кроме контентных страниц и категорий товаров, то делаем более однозначный путь:
rozetka.com.ua/category/t_balls
Далее я перешел на сам продукт «Мячи для настольного тенниса Donic Elit 1* 6 шт белый (618016): rozetka.com.ua/198578/p198578
Вот тут просто беда. ЧПУ даже перестало пахнуть.
Как должен был выглядеть такой URL? В зависимости от того как у вас устроен сайт может быть несколько вариантов. По степени загруженности URL сегментов, уменьшающих неоднозначность пути:
t_balls — slug категории
donic-elit-1-6-beliy — slug продукта
Думаю с наглядностью мы закончили.
Как получить ЧПУ в Symfony
Объяснять буду на примере свежей установки Symfony. На момент написания была взята версия Symfony 3.3.0. Предполагается, что вы установили Symfony и сконфигурировали доступ к базе данных.
Прежде чем начнется суть да дело нужно подружить нашу Symfony 3.3.0 с phpunit, чтобы она не валилась после автогенерации контроллеров. Дополните composer.json проекта двумя строчками:
И произведите обновление зависимостей:
Или так, если у вас композер архивом лежит в проекте:
Генерируем внутри бандла AppBundle сущность продукта консольной командой:
Наверняка вы заметили, что помимо остальных полей имеется интересное поле slug. Я сделал его уникальным, и без возможности быть равным null. Дело в том, что в нашем новом проекте мы должны будем иметь возможность выбирать товары из базы данных как по id-шникам, так и по slug-ам. Slug теперь — наш второй после id уникальный идентификатор записи.
Для удобства изложения и для вашего удобства тестирования мною изложенного материала сгенерируем CRUD контроллер на основе сущности AppBundle:Product, созданой на предыдущем шаге. Для этого выполним консольные команды:
Теперь после запуска сервера
Мы можем посетить страницу http://localhost:2020/products/ и увидеть пустой список продуктов да ссылку на страницу создания нового продукта:
Повременим с созданием новых продуктов. Ведь нас ждет подключение расширений Doctrine.
Подключение поведенческих расширений Doctrine
Почему нам нужны расширения Doctrine? Разве мы сами не можем генерировать slug для продукта? В целом да. Все это можно сделать собственными руками: генерировать slug на основе поля или набора полей, заботиться об уникальности slug-а, иметь всегда в виду необходимость его заполнения, иначе сайт рухнет. Но мы не ради этого здесь собрались. Так что читаем официальную документацию по тому как пользоваться расширениями Doctrine:
Тут нам советуют использовать бандл StofDoctrineExtensionsBundle, который обеспечит корректное подключение расширений Doctrine. Читаем документацию по нему:
Устанавливаем бандл StofDoctrineExtensionsBundle:
Подключаем скачанный бандл:
Из всего богатства вовлеченных нами в проект расширений Doctrine нам нужно всего одно — Sluggable behavior extension. Так что сконфигурируем StofDoctrineExtensionsBundle таким образом, чтобы это расширение было включено:
Расширение Sluggable behavior extension подключено. Надо теперь указать ему, что именно от него требуется. Для этого почитаем по нему документацию:
Оказывается, нам не так уж и много нужно сделать. Всего-то нужно в сущности продукта подключить класс аннотаций, которые предоставляет нам расширение, да указать этими аннотациями полю Product:slug, что оно должно автоматически заполняться как slug на основе полей, которые мы выберем:
Пора создавать продукты. Но перед этим нужно убрать лишнее поле из формы, ведь поле slug Doctrine будет заполнять самостоятельно:
Заходим на форму создания продукта (http://localhost:2020/products/new)
Сохраняем и видим, что slug сгенерирован. Он годен для использования в маршрутах вашего приложения:
Остается проверить ЧПУ на деле.
Первый ЧПУ маршрут
Сделаем все по простому. А именно — переделаем маршруты products_show и products_edit:
таким образом, чтобы они показывали нам продукт не по id-нику, а по slug-у. Маршрут products_delete менять не будем, так как он не виден ни пользователю, ни поисковику.
Теперь маршрут на детальный просмотр продукта выглядит так: @Route(«/
Маршрут на редактирование продукта: @Route(«/
Уникальность slug-ов
Вопрос заданный мне в комментариях пользователем psycho-coder сподвиг меня дополнить статью. А что, если я захочу создать несколько продуктов с одинаковым наименованием? Ведь Symfony позволяет это сделать. Что будет тогда со slug-ами, которые пишутся в поле с уникальным ключом в базе данных?
Как я говорил выше, Doctrine Sluggable behavior extension берет на себя ответственность по построению уникальных slug-ов.
Для примера я создал три раза подряд продукт с одним и тем же именем: „Что-то осмысленное“. Автоматически сгенерированные slug-и получились такими:
Если этот вариант не нравится, то можно для поля slug указать генерацию на основе не одного поля, а двух. Пример подобной аннотации для поля slug:
Трижды создаем продукт с промежутком в одну минуту и получаем slug-и:
Если и это не нравится, то придумываем свой вариант и делимся в комментариях
Мы добились нашей цели:
Архив с Symfony проектом, созданным в процессе написания статьи прикладываю тут.
Кстати, 3d картинку рендерил сам специально для этой статьи. Мне она понравилась, да и сил много не отняла.