Вы находитесь здесь: Главная > Программирование > Взаимодействие запросов с классом Zend_Controller

Взаимодействие запросов с классом Zend_Controller

. . . . .

analizЕсли запустить на выполнение код из листинга 2.4 (обратившись из браузера к странице http: //phpweb20), ничего полезного не произойдет — отобразится со­общение об ошибке. Поэтому надо рассмотреть вопрос, как же запросы взаимодей­ствуют с классом Zend_Controller.

Примечание

В зависимости от конфигурации среды РНР, сообщения об ошибках могут выводиться в журнал событий файловой системы, а не отображаться на экране. Поэтому, если происходит что-то странное, а сообщений об ошибках нет, нужно искать и смотреть файл журнала событий. Обработка ошибок (наподобие «4 04 Файл не найден») рассматривается в главе 14.

В листинге 2.4 вызывается метод setControllerDirectory (). Он служит для задания каталога, в котором находятся контроллеры нашего приложения — клас­сы, выполняющие обработку запросов к приложению.

Например, пусть в приложение включен контроллер под именем news, который используется и для отображения сводки всех новостей на странице, и для отобра­жения отдельных новостных заметок. Для создания такого контроллера создается класс NewsController и сохраняется в каталоге Controllers (./include/Con- trollers/NewsController. php).

Когда класс Zend_Controller перенаправляет запрос пользователя, он автома­тически разыскивает в каталоге контроллеров файл HMnController .php, где Имя соответствует заданному имени контроллера. Имя автоматически записывается с прописной буквы, так что имя контроллера news будет преобразовано в иденти­фикатор NewsController.php.

Примечание

Обычно имена в РНР (в том числе в библиотеке Zend Framework) записываются таким образом, что каждое слово в имени класса начинается с прописной буквы (независимо от того, отделены ли слова друг от друга знаком подчеркивания). Имена методов классов, напротив, начинаются со строчной буквы, а остальные слова в их идентификаторах — с прописной. В качестве дополнительной предосторожности я пишу с про­писной буквы все слова в именах статических методов классов. Так я могу сразу же видеть, какой метод является статическим, не читая его объявление.

Есть и другие соглашения об именах. С двух знаков подчеркивания начинаются встроенные mag/c-методы РНР (это, например, методы________________ get (), set (), unset (), is set ()). Имена, которые начи­наются с одного знака подчеркивания, обозначают закрытые (private) или защищенные (protected) методы, которые можно вызывать только в классе или пакете соответственно.

Теперь, чтобы обращаться к этому контроллеру в приложении, нужно использо­вать адрес http://phpweb20/news. Для отображения конкретной статьи из базы новостей можно определить операцию display, обращение к которой будет выпол­няться по адресу http: //phpweb20/news/display. Для определения этой операции нужно создать метод displayAction {) в классе NewsController. На рис. 2.3 пока­зано, как разбивается URL-адрес на имя класса-контроллера и функцию, отве­чающую за конкретную операцию в этом классе.

h tt p: //ph pweb20/riewsj/d fspfay!

 

Эта операция демонстрируется в следующем фрагменте кода. Данный конкрет­ный класс в приложении использоваться не будет, но будут создаваться классы, подобные ему.

<?php

class NewsController extends Zend Controller Action {

public function indexAction () {

echo 'News article index1;

}

public function displayAction () {

echo 'News article details';

}

}

?>

Примечание

В дополнение к строке, которую выводит приведенная выше функция, отобразится еще и сообщение об ошибке из-за того, каким образом класс zend_controller автоматически отображает шаблоны. Этот вопрос будет рассмотрен более подробно позже в этой главе, в разделе «Автоматическое генерирование представления»

Если включить этот контроллер в наше приложение (сохранив его как . /include/ Controllers/NewsController .php), то обращаться к нему следовало бы по адресу http: //phpweb2 0/news/display, и при этом отображался бы текст «News article details» («Подробный текст заметки»). В этом URL-адресе контроллером являет­ся news, а операцией — display.

По умолчанию и контроллером, и операцией является index. Вот некоторые примеры:

■    запись http://phpweb20 эквивалентна http://phpweb20/index, а также http://phpweb20/index/index;

запись http: //phpweb2 0/news эквивалентна http: //phpv/eb20/news/index.

. . . . .
  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS

Оставить комментарий

This blog is kept spam free by WP-SpamFree.

. . . . . . . . . . . . . . . . . . . .