Динамическая маршрутизация с MVC Foundation — i18n и l10n

Недавно я совершенствовал свои навыки в веб-программировании, чтобы следовать более разумному и удобному стилю кодирования MVC. Тем не менее, одна вещь, которую я использовал в своей структуре «создай свой собственный», — это гибкая динамическая маршрутизация, основанная на mod_rewrite. Похоже, это наболевшая проблема с такими вещами, как cakephp, zend и т. Д., И это вызывает у меня некоторые головные боли, пытаясь дублировать функциональность, которая у меня была.

В своем собственном контексте вы можете сделать что-то вроде следующего:

<custom htaccess rules before>
RewriteRule    ^([A-Za-z0-9-/]+)$    index.php?q=$1   [NC,L]

который переписывает все совпадающие URL-адреса в произвольный скрипт, который обрабатывает URL-адрес, анализирует комбинации "/abc-123/abc-456/controller-value" и т. д. в любой список страниц или действий, функций и т. д., которые можно настроить из таблицы базы данных, жестко запрограммированные, бла-бла. Пользовательские правила до может проходить через согласованные запросы файлов, которые существуют для ресурсов на сервере, или настраивать административную маршрутизацию и т. д.

Однако, как только политика URL-адресов MVC срабатывает, чрезвычайно сложно переопределить это поведение чем-то, что скрывает логику приложения от внешнего мира. Я никогда не понимал, зачем кому-то показывать имена функций пользователю, и это моя настоящая проблема. Это кажется ненужным и слишком навязчивым с точки зрения удобства использования и безопасности.

Итак, вопрос в том, как подойти к переписанной, переводимой и удобной политике URL-адресов, сохраняя при этом прочную основу MVC для приложения?

Реквизиты:

  • Логика приложения не раскрыта
  • Переводимые URL (i18n)
  • Динамичность и возможность добавлять, удалять, редактировать URL-адреса или страницы, не касаясь кода приложения.

Веселые времена! :D

Примеры URL:

/en/news/story-title
/pt/noticias/titulo

где URL-адреса извлекают локализованный контент на основе переданной языковой строки.


person dmp    schedule 02.01.2010    source источник
comment
Когда вы говорите о переводимых URL-адресах, вы имеете в виду наличие нескольких URL-адресов, которые извлекают один и тот же контент? Это приведет к тому, что поисковые системы увидят дублированный контент. Что-то, на что следует обратить внимание.   -  person Frank Farmer    schedule 02.01.2010
comment
Переведенные URL-адреса будут извлекать контент, относящийся к языку, связанному с URL-адресом. Например, /en/news /pt/noticias Извините, если неясно, думал, что это само собой разумеется.   -  person dmp    schedule 02.01.2010


Ответы (3)


MVC — это просто архитектурный шаблон, который не имеет ничего общего со структурой URL. Использование пользовательского уровня маршрутизации никоим образом не нарушит работу MVC. Если вам подходит централизованная маршрутизация, то, например, у вас может быть конфигурационный файл, который сопоставляет шаблоны URL (регулярные выражения или какой-либо упрощенный синтаксис) с действиями контроллера.

person Ignas R    schedule 02.01.2010
comment
Да, но вопрос в том, существует ли такая структура с этим уже на месте, или это всегда будет случай реализации с нуля. Переведенные URL-адреса для меня очень важны. - person dmp; 02.01.2010
comment
Кроме того, в целом структура MVC всегда отражается в URL-адресе, что меня раздражает, так что эти две вещи очень тесно связаны. - person dmp; 02.01.2010
comment
После небольшого исследования выяснилось, что настраиваемый уровень маршрутизации — единственный реальный путь вперед, но немного безумно иметь этот уровень маршрутизации поверх другого уровня маршрутизации только для управления URL-адресом. - person dmp; 17.01.2010

Я полагаю (хотя и не уверен), что Akelos поддерживает переводимые URL-адреса.

person Alix Axel    schedule 02.01.2010

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

Я просто использую первый сегмент после домена для загрузки одноименного контроллера (презентера), а затем передаю ему остальные сегменты и строку запроса в виде массивов. Затем каждый контроллер сам решает, что с ними делать. Минус i18n - я занимаюсь этим полуглобально.

person DanMan    schedule 13.02.2015