Учитывает регистр URL-маршрутизации для Zend - PullRequest
2 голосов
/ 30 сентября 2010

Я работаю с унаследованным кодом, написанным на PHP 5.2.6 с Zend Framework 1.5.3 на CentOS 5.5

Существует код как таковой

url:"./sales/getAlerts/?bypass=1"

Представление называется getalerts.phtml

Функция контроллера называется getAlertsAction

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

Если я изменю вышеупомянутые строки, чтобы сделать [A] в нижнем регистре оповещений, код работает.

Я скопировал через php.ini, httpd.conf,и .htaccess.Не уверен, что еще может привести к отображению без учета регистра.

Что позволяет URL-маршрутизации быть без учета регистра?

Ответы [ 3 ]

3 голосов
/ 01 октября 2010

Ваш URL: / sales / getAlerts /? Bypass = 1

Фактически расширяется до:

  • Контроллер: SalesController
  • Действие: getalertsAction
  • Просмотр: sales / getalerts.phtml

Проблема в том, что вы называете свой метод действия немного неправильным, поэтому, если старый / локальный сервер не чувствителен к регистру (большинство ПК и Mac не чувствительны к регистру) при локальном тестировании, это не имеет значения. При публикации на веб-сервере (вероятно, в UNIX) он чувствителен к регистру, поэтому он ломается.

Что вы на самом деле хотите сделать, так это чтобы все URL-адреса были строчными, а отдельные слова - черточками.

Если вы используете URL: / sales / get-alerts /? Bypass = 1

Расширяется в:

  • Контроллер: SalesController
  • Действие: getAlertsAction
  • Просмотр: sales / get-alerts.phtml

Хотя вы можете изменить это поведение, вам лучше придерживаться ZF по умолчанию с вашими соглашениями об именах.

1 голос
/ 30 сентября 2010

Вы должны иметь возможность использовать любые URL-адреса, которые вы хотите в своих маршрутах ... Я предполагаю, что вы используете маршрут по умолчанию /: controller /: action / *?Если это так, создайте пользовательские, чтобы они указывали на действия в нижнем регистре, которые вы определили.

Путаница заключается в сопоставлении параметров вашего маршрута с фактическими контроллерами / действиями / модулями.Каждое «слово» разбивается на camelCase для действия контроллера, но везде вы должны использовать дефис для разделения слов.phtml

Вы должны быть в состоянии изменить это поведение.Проверьте Zend_Controller_Dispatch_Abstract :: formatActionName ().Тем не менее, в идеале вы просто хотите изменить свой маршрут.

0 голосов
/ 30 сентября 2010

Обычно в Zend хорошей привычкой называть функцию вашего действия строчными буквами (кроме «A» действия).(По крайней мере, это то, что я делаю, чтобы избежать ошибок)

URL может быть с "getAlerts", Zend будет искать функцию "getalertsAction" в контроллере.

...