PHP Framework, который делает именованные URL-адреса? (кроме Zend Framework) - PullRequest
1 голос
/ 12 октября 2009

Мне действительно нравятся именованные URL-адреса в Django Framework , и мне было интересно, какой из фреймворков PHP поддерживает такую ​​вещь. (Я полагаю, что Zend Framework делает, но, пожалуйста, исключите это из ваших ответов без объяснения причин).

Например, в Django я могу назвать путь, подобный «/ items / ###», как «item-detail-page», который будет указывать на «функцию» представления, которая принимает идентификатор продукта в качестве параметра.

Позже я мог ссылаться на адрес на странице сведений об элементе, создавая ссылку (через вспомогательную функцию) на 'item-detail-page 123' или аналогичную. Таким образом, я могу изменить свою структуру URL позже, когда мне это понадобится, не меняя ссылок или ссылок в моих шаблонах HTML.

Такая вещь уже существует в CodeIgniter, CakePHP и т. Д.?

Пользователи Django: я знаю, это сообщение не содержит правильный синтаксис шаблона для тега шаблона 'url'. Я только пытался представить общую идею.

EDIT / UPDATE: Я полагаю, что этот вопрос был немного ненужным, так как теперь очевидно, что все популярных фреймворков поддерживают тип маршрутизации, который работает более / менее, как Django. Поэтому я считаю несправедливым присудить один лучший ответ, за исключением, возможно, того, который кажется наиболее подходящим для соответствия стилю генерации ссылок в Django, поскольку я упомянул об этом конкретно в своем вопросе (и, следовательно, в интересах других, ищущих тоже самое и найдя этот пост).

Ответы [ 8 ]

4 голосов
/ 12 октября 2009

Если я правильно вас понимаю, CakePHP определенно может это сделать. Маршруты - это то, что вы ищете.

Вся конфигурация маршрута / перенаправления собрана в одном файле rout.php. В этом вы устанавливаете свои соединения как

Router::connect('/archives/*', array('controller' => 'posts', 
                                     'action' => 'archives'));

, если вы хотите направить domain.com/archives к domain.com/posts/archives.

Немного более сложный пример:

Router::connect(
    '/:year/:month/:day/*',
    array('controller'=>'posts', 'action'=>'view'),
    array(
        'year' => '[12][0-9]{3}',
        'month' => '0[1-9]|1[012]',
        'day' => '0[1-9]|[12][0-9]|3[01]'
    )
);

если вы хотите перенаправить domain.com/YYYY/MM/DD/post-title на domain.com/posts/view/id (ссылка между post-title и id здесь не обрабатывается) *

Удачи.

3 голосов
/ 13 октября 2009

Symfony также имеет систему маршрутизации. Правила маршрутизации настраиваются в файле конфигурации (routing.yml), и ваше правило будет выглядеть примерно так:

items:
  url: /items/*
  param: { module: somemodule, action: someaction }

И, как и Cake, вы также можете использовать правило маршрутизации для генерации URL.

http://www.symfony -project.org / книга / 1_2 / 09-Полезные ссылки-и-маршрутизация-система

1 голос
/ 12 октября 2009

Я бы повторил рекомендацию Кболу о Кохане. Это довольно иронично, потому что сначала я использовал CI, но мне просто не понравилось, но потом я нашел Kohana (это CI-форк), и это здорово. Документации немного не хватает, но, безусловно, стоит тяжелой работы.

И да, вы можете сделать / items / apple-ipod-touch-16gb в Kohana без настройки маршрутизации (согласно CakePHP).

1 голос
/ 12 октября 2009

Kohana, которая разветвлена ​​от платформы Code Igniter, поддерживает PHP5 и позволяет оптимизировать SEO-URL с помощью своей библиотеки URI и класса Router:

Kohana

0 голосов
/ 13 октября 2009

Полагаю, вы имеете в виду, что можете сделать что-то вроде этого:

(псевдокод CakePHP похож)

Router::connect('link_to_homepage', '/', array('controller' => 'foo', 'action' => 'bar');

Шаблон:

$html->link('I want to go home!', 'link_to_homepage');

Вместо

$html->link('I want to go home!', '/');

Насколько я знаю, такой вещи не существует (пока) для CakePHP.

0 голосов
/ 12 октября 2009

Уже некоторое время пользуюсь CakePHP именно по этой причине. Настройки маршрутизатора предоставят вам типы URL, которые вы хотите, при этом поддерживая MVC в обслуживании.

0 голосов
/ 12 октября 2009

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

0 голосов
/ 12 октября 2009

Codeigniter делает то, что вы хотите. Я использую Codeigniter уже пару лет и мне это нравится! Почти все мои проекты php основаны на codeigniter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...