Zend Framework: Начало начал

zend frameworkТы еще мучаешься и в n—раз пишешь однотипные модули для сайта? Изобретаешь велосипед и пытаешься отделить дизайн проекта от кода? Ищешь реализацию необходимой функции в сомнительных форумах? Если на один из этих вопросов ты ответил да, то эта статья однозначно для тебя. В ней я расскажу тебе про мощный бесплатный фреймворк (Content Managment Framework), изучив который ты не только будешь экономить время на разработку проекта, но и поднимешь качество своих работ на новый уровень. Итак, усаживайся по удобнее, и читай мою первую статью из цикла «Учимся работать с Zend Framework».

Зачем использовать Zend Framework?

Основная задача любого CMF сократить время разработки проекта. Используя данный продукт, ты сможешь добиться:

  1. Постоянной структуры проектов. Проблема большинства проектов, разрабатываемых с нуля — отсутствие постоянной структуры. Сначала ты засунул нужную функцию в один модуль, в следующем проекте ты понял, что сделал ошибку и решил все поменять. В итоге, чем больше ты создаешь сайтов/web — приложений, тем больше ты совершенствуешь свои знания, а значит вносишь изменения в структуру новых проектов. А вот теперь попробуй представить, что тебе рано или поздно придется вернуться к поддержке/доработке своего самого старого проекта. Уверен, что ты просто запутаешься или потратишь много времени на разбор кода. При создании web — приложений на базе фреймворков эта проблема отпадает, т.к. ты всегда руководствуешься правилами. Такой подход может гарантировать, что даже при необходимости доработать самый старый проект, ты всегда будешь знать его структуру и без труда сможешь внести доработки.
  2. Повысить скорость разработки. В Zend Framwork реализовано множество классов, позволяющих реализовать множество типовых действий. Тебе не нужно будет изобретать очередной велосипед, т.к. у тебя имеется целый КАМАЗ уже готовых великов :).
  3. Повышения уровня безопасности. Ошибки допускают все и от них никто не застрахован. С этим трудно поспорить, но с помощью Zend Framework можно существенно сократить уровень ошибок в проекте. Поскольку множество типовых действий реально сделать с помощью встроенных классов, то значит тебе придется писать меньше кода, а чем меньше кода, тем меньше ошибок.

А это не сложно?

Кто то говорит что Zend Framework слишком сложен для понимания, тяжеловесный, требует много ресурсов сервера. В реале это не так. Если ты смог освоить PHP, то разобраться с Zend Framework сможешь и подавно, а что касается тяжеловесности, то хорошая диета без проблем устранит этот недостаток.

Плюсы и минусы Zend Framework

Идеальных решений не бывает и ZF не исключение. У него есть свои минусы и плюсы, о которых мы сейчас и поговорим.

Начнем с минусов:

  1. Тяжеловесный, версия 1.8.a весит 17 с копьем метров (так, не нужно бояться), хотя это не так уж и много. Если тебя напугал размер, то посмотри готов размеры многих коммерческих CMS. Почти все они переваливают за 10 метров и это неудивительно, ведь функций у них до фига. С Zend Framework аналогичная история. Возможностей он предоставляет массу, но не факт, что ты ими всеми сможешь воспользоваться.
  2. Требует много времени для изучения. На самом деле здесь все индивидуально. Одни могут целый год топтаться на месте, а другим достаточно несколько дней и они уже готовы писать свои первые приложения.
  3. Ресурсоемкий. Если честно, то я не видел еще не одного хостера который бы загнулся от Zend Framework.

Это все, что я обнаружил из минусов.

Плюсы:

  1. Zend Framework — набор классов, большинство которых не привязаны к друг другу, а значит можно использовать как по запчастям в других проектах так и полностью. В данном каркасе есть все, что нужно в современном ВЕБ проекте.
  2. Наличие компонентом для работы со сторонними сервисами.
  3. Объектно ориентированный подход (ООП).
  4. Основывается на идеях MVC.
  5. Хорошая документация.

Так, хватит. Не будем больше грузиться теорией и перейдем сразу к практике. Оценим так сказать возможности гиганта :) Для работы нам понадобиться сам Zend Framework, его можно взять от сюда, HTTP север с поддержкой mod_rewrite, PHP не ниже версии 5.2, и MySQL5. Скачиваем последнею стабильную версию. Кстати чуть не забыл, скачать ZF можно в двух разных сборках Full и Minimal.

Full Package — содержит в себе Dojo Toolkit, и демки по работе с каркасом. Поскольку ты только приступаешь к изучению этого фреймворка, то рекомендую скачать именно этот вариант. Изучение демок еще никому не повредило.

Minimal Package — содержит только библиотеку Zend Framework.

Распаковываем папку с каркасом(/library/Zend), ZF лучше держать на несколько уровней выше, что бы не плодить файлы для каждого проекта, у меня на пример получилось так в нутрии этой папочки D:\library\ZF\1.7.8\Zend\ .

Делаем структуру проекта

Организуем файловую структуру для нашего будущего проекта. В корне приложения создаем два каталога, application — там будут храниться все наши программные модули проекта и public в которой будут находиться обще доступные файлы. Так же в корне создадим index.php и .htaccess в который сразу добавим правила перенаправления.

Файл .htaccess:

RewriteEngine on

RewriteRule .* index.php

В папку public тоже нужно добавить .htaccess только с другим содержанием.

Файл /public/.htaccess :

RewriteEngine off

В папки application создадим 3 папки: configs, library, modules.

configs — тут будут файлы конфигураций проекта.

library — здесь будут дополнительные библиотеки.

modules — а тут будут находиться модули нашего приложения.

После всех этих нехитрых манипуляций у меня получилась вот такая структура:

Корень:

application

configs

library

modules

public

.htaccess

.htaccess

index.php

Раз структура готова, то можно переходить к кодингу ;-)

Открываем наш индексный файлик — index.php. Указываем интепритаору, что сейчас начнется php код и определим четыре константы:

PATH_TO_ZF — путь до ZF

PATH_TO_APPLICATION — путь к нашей папочки application

PATH_TO_LIBRARY – путь к нашем библиотекам

PATH_TO_MODULES – путь к нашим модулям

Код:

define('PATH_TO_ZF', '../../../ZF/1.7.7/');

define('PATH_TO_APPLICATION', './application/');

define('PATH_TO_LIBRARY', PATH_TO_APPLICATION . 'library/');

define('PATH_TO_MODULES', PATH_TO_APPLICATION . 'modules/');

Теперь укажем интепритатору от куда подгружать все наше добро:

Код:

set_include_path(PATH_TO_ZF . PATH_SEPARATOR . PATH_TO_APPLICATION . PATH_SEPARATOR . PATH_TO_LIBRARY);

Так, следующим шагом нужно подгрузить Zend_Loader (чуть позже мы к нему вернемся) и зарегистрируем автозагрузку классов

Код:

require_once 'Zend/Loader.php';

Zend_Loader::registerAutoload();

Так, Zend_Loader подгрузили, теперь проинициализируем Zend_Controller_Front (о нем тоже чуть позже) и укажем диспетчеру местонахождения наших модулей. После этого запустим процесс диспетчеризации.

Код:

$controller = Zend_Controller_Front::getInstance();

$controller->addModuleDirectory(PATH_TO_MODULES)
           ->dispatch();

В итоге должно получиться что вроде этого:

addModuleDirectory(PATH_TO_MODULES)
           ->dispatch();

Как ты заметил Zend_Controller_Front нигде не подгружается, т.к. Zend_Loader подгрузил Controller автоматически. Узнает Zend_Loader расположение контроллера по его имени:

Класс Zend_Controller_Front лежит в Zend/Controller/Fron.php

Немного о контроллере

Zend_Controller_Front реализует паттерн Синглетон, а значит он может быть инициализирован в проекте только один раз. При вызове метода dispatch(), диспетчер уходит в цикл диспечерезации, проходящий три события:

  1. Маршрутизация — определяет какой модуль, контроллер и событие вызвать. Если не прописаны другие пути, то: site.ru/modules/controller/action/var1/value1/var2/value2/. Возможно также переопределение путей при помощи Zend_Controller_Route, но об этом в следующей статьей.
  2. Диспетчеризация — проверка на наличие вызываемого модуля, контроллера и события, и вызов события.
  3. Ответ — Рендеринг вида.

Делаем модуль

В нашей папке modules создадим папку default, это будет наш первый модуль. Если мы обратимся к нашему сайту по ссылке site.ru то будет выполняться наш дефолтный модуль. Имя дефолтного модуля можно изменить на пример на «index». Делается это с помощью метода — setDefaultModule(), объекта Zend_Controller_Front. Вызывать метод нужно обязательно перед диспетчеризацией. В качестве параметра методу нужно переадать имя модуля, которую будет использоваться по умолчанию.

Код:

$controller->setDefaultModule('index');

Едем дальше. В папке модуля создадим еще две папки:

controllers — тут будут контроллеры модуля

views — а здесь все что связано в видом (представлением)

Создадим новый контроллер(IndexController.php), и вставим в него вот этот код:

Теперь нужно создать скрипт вида для нашего контроллера. Для этого создадим в папке views папочки scripts/index. Должно получиться примерно так:

default

controllers

IndexController.php

views

scripts

index

В папке views/scripts/index/ создадим файлик index.phtml. Все, можно пробовать запускать! Если ошибок нету, то значит ты меня хорошо слушал :) Теперь передадим виду параметр:
$this->view->var = ‘ZendFramework’;

Общий вид контроллера у меня выглядет так:

view->var = ‘ZendFramework’;
    }
}

А в файл вида добавим:

var; ?>

И обновляем страницу.

Создадим 404 страницу

Создаем еще один контроллер в нашем модуле, ErrorController.php
Содержание ErrorController.php:

Теперь сделаем представление для ошибки: /default/views/scripts/error/error.phtml

Содеражание error.phtml:
404

Для тестирования перейдем по site.ru/qwerty. Такой страницы у нас нет, поэтому резульат будет соответствующий. Для того что бы включит выводить ошибки из—за которой остановлена работа скрипта перед диспечерезаций вызываем метод throwExceptions() и передавем соответствующий парамер, если хотим видить ошибку, то true и если хотим видить при ошибка созданную нами страницу то false.

Coding Compleate

Для начала думаю, что хватит. Для первого знакомства мы рассмотрели достаточно много интересных вещей. Пока может быть не все понятно, но не волнуйся. Мастерство приходит со временем. Главное не лениться и пытаться что—то сделать. В статье я упомянул, что Zend Framework базируется на архитектуре MVC. В статье я не стал делать упор на теорию, т.к. ее написано уже в достаточном объеме и ты можешь найти ее в инете самостоятельно. Если тебя испугали или ввели в тупик слова «вид», «контроллер», то бегом открывай гугл и читай основы MVC. Все, на этом разрешите откланяться.
До скорой встречи!