Необходимо настроить более чистые ссылки - в настоящее время ссылки слишком длинные - Zend Framework - PullRequest
0 голосов
/ 22 февраля 2010

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

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

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

Кажется, все в порядке, но сейчас я работаю над тем, чтобы сделать ссылки более читабельными и удобными для поисковых систем.

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

Что-то действительно простое, вроде следующего, будет еще лучше:

www.mywebsite.com/John-Smith-1809

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

Ответы [ 3 ]

3 голосов
/ 22 февраля 2010

Ознакомьтесь с руководством 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);

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

2 голосов
/ 24 февраля 2010

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

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

В вашей начальной загрузке вы бы сделали:

$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-id / user-name, поэтому / 1234 / John-Smith /. Он будет искать пользовательский контроллер в пользовательском модуле и перейдет к действию чтения. Конечно, вы можете изменить это на другой модуль / контроллер / действие, если хотите.

В этом случае в модуле User у вас будет тот 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', который указывает маршрутизатору использовать маршрут "user", который мы определили ранее.

0 голосов
/ 22 февраля 2010

Вы можете использовать модуль 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>
...