Как маршрутизировать страницы, используя текст вместо идентификаторов?

В настоящее время мое приложение 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.....
Другие вопросы по тегам