Необходимо настроить более чистые ссылки - в настоящее время ссылки слишком длинные - Zend framework

StackOverflow https://stackoverflow.com/questions/2309584

Вопрос

Я использую zend framework для своего проекта - я попытался настроить, используя чистые ссылки, - однако я заметил, что мои ссылки, похоже, становятся действительно очень длинными, и задаюсь вопросом, есть ли на данный момент способ включить структуру, в которой я мог бы использовать ссылки меньшего размера.

Вот пример, на моем веб-сайте есть контроллер каталога, у которого есть действие person, которое принимает параметр id - таким образом, ссылка для просмотра пользователя с идентификатором сертификата выглядит следующим образом:

www.mywebsite.com/directory/person/id/1809

Кажется, все в порядке, но сейчас я работаю над тем, чтобы сделать ссылки более читаемыми и удобными для поисковой системы - я хотел бы иметь что-то вроде - предполагая, что идентификатор пользователя 1809 называется John Smith:

www.mywebsite.com/directory/person/John-Smith-1809

Что-то действительно базовое, подобное следующему, было бы еще лучше:

www.mywebsite.com/John-Smith-1809

Хотя я не знаю, как я мог бы справиться с этим, не упоминая контроллер или действие...любые идеи, ребята, действительно помогли бы...

Это было полезно?

Решение

Взгляните на Руководство ZF по использованию маршрутов.

В принципе, вам нужно что-то подобное, чтобы это заработало:

$route = new Zend_Controller_Router_Route_Regex(
    '(.+)-(\d+)',
    array(
        'controller' => 'directory',
        'action'     => 'person'
    ),
    array(
        1 => 'name',
        2 => 'id'
    ),
    '%s-%d'
);
$router->addRoute('directoryPerson', $route);

Примечание:не ожидайте, что это выйдет из коробки.Скорее всего, вам придется его изменить.Однако это должно направить вас в правильном направлении.

Другие советы

Как и в предыдущем ответе, вы могли бы использовать маршрут регулярных выражений, но для начала, вероятно, было бы проще использовать "обычный" маршрут, который выглядит как:

http://yoursite.com/1234/John-Smith/

В вашем bootstrap вы бы сделали:

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();

$router->addRoute('user', new Zend_Controller_Router_Route(
    ':user-id/:user-name/',
    array(
        'module' => 'user',
        'controller' => 'user',
        'action' => 'read'
    )
));

Это добавляет маршрут с именем "user" к маршрутизатору, который имеет вид /user-id/user-name, so /1234/John-Smith/.Он будет искать usercontroller в пользовательском модуле и перейдет к действию чтения.Конечно, вы можете изменить это на другой модуль / контроллер / действие, если пожелаете.

Тогда у вас был бы этот User_UserController в пользовательском модуле, у которого есть readAction();В этом действии вы могли бы получить идентификатор с помощью:

$userId = $this->_getParam('user-id');

Аналогично, если вам это понадобится, вы могли бы восстановить имя.

$userName = $this->_getParam('user-name');

В скрипте просмотра вы могли бы сгенерировать URL-адрес для этого маршрута с помощью:

<?php echo $this->url(array('user-id' => 1234, 'user-name' => 'John Smith'), 'user', true); ?>

Обратите внимание на параметр 'user', который указывает маршрутизатору использовать "пользовательский" маршрут, который мы определили ранее.

Вы можете использовать модуль apache mod_rewrite для перезаписи вашего URL-адреса

http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

<IfModule mod_rewrite.c>

  RewriteEngine On

  RewriteCond ###blah blah blah###
  RewriteRule ###blah blah blah###

</IfModule>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top