'Hello world' и Zend Framework
by Вредный • 20.02.2010 • Zend Framework • Комментарии [9]
Буквально несколько дней назад решил я освоить какой-нибудь PHP фрейворк, много статей и обзоров прочитать пришлось, чтобы остановиться все же на Zend Framework’е. Как пишут почти везде, что начало в нем самое сложное, дальше будет все намного понятнее. У меня для того, чтобы заработало первое приложение, которое выводит лишь строчку всем известную ‘Hello world’, ушел целый вечер. Хватит слов, ближе к делу.
Первым делом нам понадобиться конечно же web-сервер, подойдет и Denwer, и XAMPP, и Zend Server и думаю еще много чего подойдет нам.
Затем нам нужно скачать сам фреймворк, либо с официального сайта (надо будет пройти регистрацию), либо с моего сайта (последняя на момент публикации этой заметки версия).
Теперь построим структуру папок по определенной иерархии. Многие советуют папки с классами, папку с настройками выносить на уровень выше, чем находится Root директория web-сервера, но на многих хостингах не имеется возможности это реализовать, поэтому будет организовывать все в папке проекта. Вот что у нас должно получиться в итоге (картинка кликабельна). 
Осталось теперь разархивировать скачанный архив и из папки library скопировать папку Zend в папку library нашего проекта и переходить непосредственно к кодингу.
Нам потребуется, если мы работаем с сервером Apache, установленный и включенный модуль
mod_rewrite, чтобы все запросы к серверу обрабатывались одним файлов, в данном случае index.php. У меня проект называется zend-hello, если у вас отличается имейте это ввиду, чтобы не допустить ошибок при составлении путей.
Чтобы все запросы перенаправлялись одним файлов нам нужно указать это в файле zend-hello/.htaccess
1 2 3 4 | RewriteEngine on RewriteRule .* index.php php_flag magic_quotes_gpc off php_flag register_globals off |
Первые две строчки включают mod_rewrite и перенаправляют все запросы соответственно. Третья и четвертая устанавливают нужные для безопасности параметры php.
И еще нам нужно сразу предусмотреть возможность отдавать сервером картинки и *.css файлы в обход index.php. Мы об этом позаботились и заранее разместили эти файлы в папке public. Создадим теперь файл zend-hello/public/.htaccess с таким содержимым.
1 | RewriteEngine off |
Тем самым отключив mod_rewrite для этой папки.
Переходим к главному файлу нашего проекта, который делает всю «черную» работу.
zend-hello/index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php error_reporting(E_ALL && E_STRICT); set_include_path('.' . PATH_SEPARATOR . './library/' . PATH_SEPARATOR . './application/models/' . PATH_SEPARATOR . get_include_path()); //включаем в путь папки из нашего проекта //PATH_SEPARATOR используется для разделения папок в пути //для *nix систем - это ':', для win - ';' include "Zend/Loader.php"; Zend_Loader::loadClass('Zend_Controller_Front'); //установка контроллеров $frontController = Zend_Controller_Front::getInstance(); $frontController->throwExceptions(true); $frontController->setControllerDirectory('./application/controllers'); //запускаем $frontController->dispatch(); |
Если что-то не понятно, а для новичка должно быть непонятно почти все, то не расставайтесь, все поймем дальше на примерах.
Важно пока лишь для нас знать, что закрывающийся php тег НЕ надо ставить
Теперь нам надо настроить контроллер, чтобы он отобразил нам заветную фразу.
zend-hello/application/controllers/IndexController.php
1 2 3 4 5 6 7 | <?php class IndexController extends Zend_Controller_Action { function indexAction() { $this->view->title = "Hello world's page"; $this->view->header = "Hello, world!"; } } |
Здесь мы присваиваем переменной title название нашей страницы, а переменной header заветную фразу. Отсалось настроить виды (views), чтобы выводить информацию.
Файл zend-hello/application/views/scripts/index/index.phtml
1 2 3 4 5 6 7 8 | <html> <head> <title><?php echo $this->escape($this->title); ?></title> </head> <body> <h1><?php echo $this->escape($this->header); ?></h1> </body> </html> |
Если вы все сделали правильно и четко следовали моим инструкциям, то в конечном итоге, у вас должна появиться фраза, обещанная мной в самом начале.
Эта заметка не претендует звание подробного мануала по разработке высоконагруженных приложений на Zend Framework. Но в самом начале она может подтолкнуть на дальнейшее изучение данного фреймворка. Спасибо за внимание и удачи вам в веб-программировании и не только.
*При написании заметки использовалась Netbeans IDE для PHP, скачать бесплатно которую можно тут

С ветки 1.8 есть возможность использовать Zend_Application для старта приложения. Собственно, ей и надо пользоваться.
2Buranich: Спасибо за замечание, учту при дальнейших заметках.
Спасибо, заработало.
Не могли бы Вы подробнее расписать этот блок кода:
set_include_path(‘.’ . PATH_SEPARATOR . ‘./library/’
. PATH_SEPARATOR . ‘./application/models/’
. PATH_SEPARATOR . get_include_path());
//включаем в путь папки из нашего проекта
//PATH_SEPARATOR используется для разделения папок в пути
//для *nix систем — это ‘:’, для win — ‘;’
на самом деле все просто и этими строчками мы лишь задаем пути, в которых zend будет искать файлы, library — папка, где лежит сам фреймворк, models — в последних версиях писать не обязательно, если модели названы, придерживаясь стандарта
этот пример не очень удачный, в последних версиях старт приложения на ZF немного отличается, что подмечено в первом комментарии к этой заметке
по-больше бы таких статей! )
Хорошая статья для новичков, спасибо!)
«Гвозди бы делать из этих людей ….»
Перемучил штук 8 туториалов, … и не прояснилось.
А тут — молодца! Кратко, точно, полно, понятно, заработало с первого раза.
Спасибо ОГРОМНОЕ.
Возможно будет уместна корректировочка-дополнение для не очень внимательных. Вместо:
«Создадим теперь файл zend-hello/public/.htaccess с таким содержимым.»
Написать:
«Создадим теперь ЕЩЕ В ПАПКЕ zend-hello/public/ файл zend-hello/public/.htaccess с таким содержимым.»
А то там про один .htaccess, потом сразу про другой.
ЕЩЕ РАЗ — СПАСИБО!
Спасибо вам за приятный комментарий, вот для таких людей и стараемся писать, рад, что вам помогла данная заметка
По поводу сумбурности изложения материал, то я стараюсь быть последовательным, но чукча не писатель )
Оффтоп, но будет вам очень полезен. Не используйте данную структуру, она устарела, начиная с версии 1.8.
Чтобы не было мучительно больно переучиваться.