Как маршрутизировать страницы, используя текст вместо идентификаторов?
В настоящее время мое приложение Zend маршрутизирует, используя URL:
example.com/news/12
Выбирает новости с идентификатором 12 для отображения на странице.
Но клиент хочет использовать только текст, например:
example.com/news/man-dies-after-burning-himself
Кто-нибудь знает, как это можно сделать?
2 ответа
Есть несколько способов. Без вашего кода это будет довольно сложно объяснить, но я попробую. Во-первых, есть один способ, которым вы можете решить эту проблему - хранить новости с атрибутом friendlyUrl
(например), и вместо того, чтобы выбирать новости по идентификатору, вы выбираете их по friendlyUrl, но вам всегда нужно будет проверять, что с этим friendlyUrl не сохраняются другие новости. И friendlyUrl должен исходить из заголовка новости, проанализированного с помощью функции, которая удаляет все специальные символы, не разрешенные в URL, и заменяет пробелы на "-". Другим способом было бы, например, Stackru, используя ID и TEXT в URL:
Как маршрутизировать страницы, используя текст вместо идентификаторов?
Если вы проверите этот URL-адрес, вы сначала увидите идентификатор, а потом friendlyUrl или friendlyName или как хотите, чтобы он вызывался.
В вашем module.config.php
'router' => array(
'routes' => array(
'news' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '[/:news][/:url][/]',
'constraints' => array(
'url' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
'__NAMESPACE__' => 'YourModule\Controller',
'controller' => 'News',
'action' => 'index',
),
),
),
),
),
если вы решите использовать текст вместо идентификатора, вы должны быть уверены, что URL уникален, иначе ваше приложение прервет первое совпадение. в примере вы добавили:
url = "человек-умирает-после-сжигания-сам"
Это покроет:
- example.com/news/man-dies-after-burning-himself
- example.com/news/man-dies-after-burning-himself-2015-07-07
- example.com/news/man
- example.com/news/2015-07-07.....