Zend_Acl…………………………………………………………………………………………………….. 2
Введение……………………………………………………………………………………………………… 2
Ресурсы……………………………………………………………………………………………………. 2
Роли………………………………………………………………………………………………………….. 2
Создание списка контроля доступа (ACL)……………………………………………………………………………………………….. 4
Регистрация ролей……………………………………………………………………………………………………………………………… 4
Определение контроля доступа………………………………………………………………………………………………………. 5
Запросы к ACL……………………………………………………………………………………………. 6
Настройка управления доступом………………………………………………………………………………………………… 8
Точное управление доступом………………………………………………………………………………………………………………. 8
Удаление правил доступа……………………………………………………………………………………………………… 9
Zend_Application…………………………………………………………………………………….. 11
Введение…………………………………………………………………………………………………… 11
Zend_Application – Быстрый старт……………………………………………………………………………………………………………. 11
Использование вместе с Zend_Tool……………………………………………………………………………………………………… 11
Добавление Zend_Application в приложение……………………………………………………………………………………….. 13
Добавление и создание ресурсов……………………………………………………………………………………………………….. 15
Следующие шаги с Zend_Application……………………………………………………………………………………………………. 16
Расширенное использование………………………………………………………………………………………………………………… 17
Постоянное хранение данных ACL………………………………………………………………………………………………………. 17
Написание условных правил ACL с утверждениями……………………………………………………………………………….. 17
Теоретические основы работы с Zend_Application……………………………………………………………………………………. 19
Начальная загрузка……………………………………………………………………………………………………………………………. 20
Методы ресурсов……………………………………………………………………………………………………………………………… 20
Загрузки, использующие плагины ресурсов………………………………………………………………………………………….. 21
Реестр ресурсов……………………………………………………………………………………………………………………………….. 23
Отслеживание зависимостей……………………………………………………………………………………………………………… 25
Плагины ресурсов……………………………………………………………………………………………………………………………… 26
Zend_Cache………………………………………………………………………………………………………………………………………….. 28
Введение……………………………………………………………………………………………………………………………………………. 28
Теория кэширования……………………………………………………………………………………………………………………………. 30
Фабричный метод Zend_Cache……………………………………………………………………………………………………………. 30
Добавление тегов к записям………………………………………………………………………………………………………………. 31
Очистка кэша……………………………………………………………………………………………………………………………………. 31
Фронтэнды Zend_Cache……………………………………………………………………………………………………………………….. 32
Zend_Cache_Core…………………………………………………………………………………………………………………………………. 32
Введение……………………………………………………………………………………………………………………………………………. 32
Доступные опции……………………………………………………………………………………………………………………………… 32
Примеры…………………………………………………………………………………………………………………………………………. 33
Zend_Cache_Frontend_Output……………………………………………………………………………………………………………….. 35
Введение……………………………………………………………………………………………………………………………………………. 35
Доступные опции……………………………………………………………………………………………………………………………… 35
Примеры…………………………………………………………………………………………………………………………………………. 35
Zend_Cache_Frontend_Function……………………………………………………………………………………………………………… 36
Введение……………………………………………………………………………………………………………………………………………. 36
Доступные опции……………………………………………………………………………………………………………………………… 36
Примеры…………………………………………………………………………………………………………………………………………. 36
Zend_Cache_Frontend_Class………………………………………………………………………………………………………………….. 36
Введение……………………………………………………………………………………………………………………………………………. 36
Доступные опции……………………………………………………………………………………………………………………………… 36
Примеры…………………………………………………………………………………………………………………………………………. 37
Zend_Cache_Frontend_File…………………………………………………………………………………………………………………….. 37
Введение……………………………………………………………………………………………………………………………………………. 37
Доступные опции……………………………………………………………………………………………………………………………… 38
Примеры…………………………………………………………………………………………………………………………………………. 38
Zend_Cache_Frontend_Page………………………………………………………………………………………………………………….. 38
Введение……………………………………………………………………………………………………………………………………………. 38
Доступные опции……………………………………………………………………………………………………………………………… 39
Примеры…………………………………………………………………………………………………………………………………………. 40
Отмена кэширования……………………………………………………………………………………………………………………………. 41
Бэкэнды Zend_Cache……………………………………………………………………………………………………………………………. 43
Zend_Cache_Backend_File……………………………………………………………………………………………………………………… 43
Доступные опции:…………………………………………………………………………………………………………………………….. 43
Zend_Cache_Backend_Sqlite…………………………………………………………………………………………………………………… 43
Доступные опции:…………………………………………………………………………………………………………………………….. 43
Zend_Cache_Backend_Memcached…………………………………………………………………………………………………………. 44
Доступные опции:…………………………………………………………………………………………………………………………….. 44
Zend_Cache_Backend_Apc…………………………………………………………………………………………………………………….. 44
Zend_Cache_Backend_Xcache………………………………………………………………………………………………………………… 44
Доступные опции:…………………………………………………………………………………………………………………………….. 45
Zend_Cache_Backend_ZendPlatform……………………………………………………………………………………………………….. 45
Zend_Cache_Backend_TwoLevels……………………………………………………………………………………………………………. 45
Доступные опции:…………………………………………………………………………………………………………………………….. 45
Zend_Cache_Backend_ZendServer_Disk и Zend_Cache_Backend_ZendServer_ShMem……………………………………. 46
Zend_Config………………………………………………………………………………………………………………………………………….. 47
Введение……………………………………………………………………………………………………………………………………………. 47
Теоретические основы работы с Zend_Config………………………………………………………………………………………….. 48
Zend_Config_Ini……………………………………………………………………………………………………………………………………. 49
Zend_Config_Xml………………………………………………………………………………………………………………………………….. 51
Zend_Config_Writer……………………………………………………………………………………………………………………………… 55
Zend_Controller……………………………………………………………………………………………………………………………………. 57
Zend_Controller – Быстрый старт…………………………………………………………………………………………………………….. 57
Введение……………………………………………………………………………………………………………………………………………. 57
Быстрый старт…………………………………………………………………………………………………………………………………… 57
Создайте файловую структуру…………………………………………………………………………………………………………….. 57
Установите корневую директорию для документов………………………………………………………………………………. 57
Создайте свои правила перезаписи…………………………………………………………………………………………………….. 57
Создайте файл загрузки……………………………………………………………………………………………………………………… 58
Создайте свой контроллер действий, используемый по умолчанию……………………………………………………….. 59
Создайте скрипт вида………………………………………………………………………………………………………………………… 60
Создайте контроллер ошибок…………………………………………………………………………………………………………….. 60
Смотрим сайт!………………………………………………………………………………………………………………………………….. 61
Основы Zend_Controller………………………………………………………………………………………………………………………… 62
Фронт-контроллер……………………………………………………………………………………………………………………………….. 65
Обзор………………………………………………………………………………………………………………………………………………. 65
Ключевые методы…………………………………………………………………………………………………………………………….. 65
getInstance()…………………………………………………………………………………………………………………………………….. 65
setControllerDirectory() и addControllerDirectory()………………………………………………………………………………….. 65
addModuleDirectory() и getModuleDirectory()……………………………………………………………………………………….. 66
dispatch()…………………………………………………………………………………………………………………………………………. 66
run()………………………………………………………………………………………………………………………………………………… 67
Методы-аксессоры для конфигурирования………………………………………………………………………………………….. 67
Параметры фронт-контроллера………………………………………………………………………………………………………….. 69
Расширение фронт-контроллера………………………………………………………………………………………………………… 70
Объект запроса……………………………………………………………………………………………………………………………………. 71
Введение…………………………………………………………………………………………………………………………………………. 71
HTTP-запросы………………………………………………………………………………………………………………………………………. 71
Доступ к данным запроса…………………………………………………………………………………………………………………… 71
Базовый URL и поддиректории……………………………………………………………………………………………………………. 73
Определение HTTP-метода запроса……………………………………………………………………………………………………. 74
Определение запросов AJAX……………………………………………………………………………………………………………… 74
Создание подклассов объекта запроса………………………………………………………………………………………………… 74
Стандартный маршрутизатор………………………………………………………………………………………………………………… 76
Введение…………………………………………………………………………………………………………………………………………. 76
Использование маршрутизатора………………………………………………………………………………………………………… 78
Базовые операции Rewrite Router……………………………………………………………………………………………………….. 78
Маршруты, используемые по умолчанию……………………………………………………………………………………………. 79
Базовый URL и поддиректории……………………………………………………………………………………………………………. 80
Глобальные параметры…………………………………………………………………………………………………………………….. 81
Типы маршрутов………………………………………………………………………………………………………………………………….. 81
Zend_Controller_Router_Route……………………………………………………………………………………………………………. 81
Значения переменных по умолчанию…………………………………………………………………………………………………. 82
Требования к переменным………………………………………………………………………………………………………………… 83
Переводимые сегменты…………………………………………………………………………………………………………………….. 83
Zend_Controller_Router_Route_Static…………………………………………………………………………………………………… 86
Zend_Controller_Router_Route_Regex…………………………………………………………………………………………………. 86
Zend_Controller_Router_Route_Hostname……………………………………………………………………………………………. 90
Zend_Controller_Router_Route_Chain………………………………………………………………………………………………….. 90
Объединение маршрутов через Zend_Config……………………………………………………………………………………….. 91
Использование Zend_Config вместе с RewriteRouter…………………………………………………………………………………. 94
Создание подклассов маршрутизатора…………………………………………………………………………………………………… 94
Диспетчер…………………………………………………………………………………………………………………………………………… 96
Обзор………………………………………………………………………………………………………………………………………………. 96
Создание подклассов диспетчера……………………………………………………………………………………………………….. 97
Контроллеры действий……………………………………………………………………………………………………………………….. 101
Введение……………………………………………………………………………………………………………………………………….. 101
Инициализация объекта…………………………………………………………………………………………………………………… 102
Перехватчики Pre- и Post-Dispatch……………………………………………………………………………………………………… 103
Аксессоры………………………………………………………………………………………………………………………………………. 103
Интеграция вида……………………………………………………………………………………………………………………………… 104
Инициализация вида……………………………………………………………………………………………………………………….. 104
Рендеринг видов…………………………………………………………………………………………………………………………….. 105
Сервисные методы………………………………………………………………………………………………………………………….. 106
Создание подклассов контроллера действий……………………………………………………………………………………… 106
Помощники действий………………………………………………………………………………………………………………………….. 109
Введение……………………………………………………………………………………………………………………………………….. 109
Инициализация помощника……………………………………………………………………………………………………………… 109
Брокер помощников………………………………………………………………………………………………………………………… 109
Встроенные помощники действий…………………………………………………………………………………………………….. 111
ActionStack……………………………………………………………………………………………………………………………………… 111
AutoComplete…………………………………………………………………………………………………………………………………. 113
Автодополнение c Dojo……………………………………………………………………………………………………………………. 114
Автодополнение с Scriptaculous………………………………………………………………………………………………………… 117
ContextSwitch и AjaxContext……………………………………………………………………………………………………………… 118
Доступные по умолчанию контексты…………………………………………………………………………………………………. 119
Создание своего контекста……………………………………………………………………………………………………………….. 120
Установка контекстов для действий…………………………………………………………………………………………………… 121
Инициализация переключения контекста………………………………………………………………………………………….. 123
Дополнительный функционал………………………………………………………………………………………………………….. 123
Функционал AjaxContext………………………………………………………………………………………………………………….. 125
FlashMessenger……………………………………………………………………………………………………………………………….. 126
Введение……………………………………………………………………………………………………………………………………….. 126
Базовый пример использования……………………………………………………………………………………………………….. 126
JSON………………………………………………………………………………………………………………………………………………. 127
Redirector……………………………………………………………………………………………………………………………………….. 128
Введение……………………………………………………………………………………………………………………………………….. 128
Базовые примеры использования……………………………………………………………………………………………………… 130
ViewRenderer………………………………………………………………………………………………………………………………….. 133
Введение……………………………………………………………………………………………………………………………………….. 133
API…………………………………………………………………………………………………………………………………………………. 134
Примеры базового использования…………………………………………………………………………………………………….. 139
Примеры продвинутого использования……………………………………………………………………………………………… 142
Написание собственных помощников………………………………………………………………………………………………… 143
Объект ответа……………………………………………………………………………………………………………………………………. 145
Использование……………………………………………………………………………………………………………………………….. 145
Управление заголовками…………………………………………………………………………………………………………………. 146
Именованные сегменты…………………………………………………………………………………………………………………… 147
Проверка на исключения в объекте ответа…………………………………………………………………………………………. 149
Создание подклассов объекта ответа…………………………………………………………………………………………………. 150
Плагины…………………………………………………………………………………………………………………………………………….. 151
Введение……………………………………………………………………………………………………………………………………….. 151
Написание плагинов………………………………………………………………………………………………………………………… 151
Использование плагинов………………………………………………………………………………………………………………….. 152
Извлечение и работа с плагинами……………………………………………………………………………………………………… 153
Плагины, включенные в стандартную поставку…………………………………………………………………………………… 153
ActionStack……………………………………………………………………………………………………………………………………… 153
Zend_Controller_Plugins_ErrorHandler…………………………………………………………………………………………………. 154
Использование ErrorHandler в качестве обработчика ошибки 404………………………………………………………….. 155
Управление сгенерированным ранее выводом…………………………………………………………………………………… 157
Примеры использования плагина……………………………………………………………………………………………………… 157
Пример контроллера ошибок…………………………………………………………………………………………………………… 158
Использование модульной структуры директорий…………………………………………………………………………………. 159
Введение……………………………………………………………………………………………………………………………………….. 159
Определение директорий контроллеров в модулях……………………………………………………………………………. 160
Маршрутизация применительно к модулям……………………………………………………………………………………….. 161
Модуль или глобальный контроллер по умолчанию…………………………………………………………………………… 161
Исключения………………………………………………………………………………………………………………………………………. 162
Введение……………………………………………………………………………………………………………………………………….. 162
Обработка исключений……………………………………………………………………………………………………………………. 162
Исключения в MVC, с которыми вы можете встретиться………………………………………………………………………. 163
Zend_Db……………………………………………………………………………………………………………………………………………… 167
Zend_Db_Adapter……………………………………………………………………………………………………………………………….. 167
Соединение с БД с использованием адаптера…………………………………………………………………………………….. 167
Использование конструктора адаптера Zend_Db…………………………………………………………………………………. 167
Использование фабрики Zend_Db……………………………………………………………………………………………………… 168
Использование Zend_Config с фабрикой Zend_Db……………………………………………………………………………….. 169
Параметры адаптера……………………………………………………………………………………………………………………….. 169
Управление отложенными соединениями…………………………………………………………………………………………. 171
Пример базы данных……………………………………………………………………………………………………………………….. 172
Чтение результатов запроса……………………………………………………………………………………………………………… 173
Извлечение полного набора результатов…………………………………………………………………………………………… 173
Изменение режима извлечения……………………………………………………………………………………………………….. 174
Извлечение результатов выборки в виде ассоциативного массива………………………………………………………… 175
Извлечение единственного столбца из результатов выборки……………………………………………………………….. 175
Извлечение пар ключ-значение из результатов выборки…………………………………………………………………….. 175
Извлечение единственной строки из результатов выборки………………………………………………………………….. 176
Извлечение единственного скалярного значения из результатов выборки…………………………………………….. 176
Изменение данных в БД…………………………………………………………………………………………………………………… 176
Добавление данных………………………………………………………………………………………………………………………… 176
Получение сгенерированного значения…………………………………………………………………………………………….. 177
Обновление данных………………………………………………………………………………………………………………………… 179
Удаление данных……………………………………………………………………………………………………………………………. 180
Заключение в кавычки значений и идентификаторов…………………………………………………………………………… 180
Использование quote()…………………………………………………………………………………………………………………. 181
Использование quoteInto()…………………………………………………………………………………………………………. 182
Использование quoteIdentifier()…………………………………………………………………………………………….. 183
Управление транзакциями……………………………………………………………………………………………………………….. 184
Листинг и описание таблиц……………………………………………………………………………………………………………….. 185
Закрытие соединения………………………………………………………………………………………………………………………. 186
Запуск других операторов БД……………………………………………………………………………………………………………. 186
Примечания к отдельным адаптерам………………………………………………………………………………………………… 187
IBM DB2………………………………………………………………………………………………………………………………….. 187
MySQLi……………………………………………………………………………………………………………………………………. 187
Oracle……………………………………………………………………………………………………………………………………….. 187
PDO для IBM DB2 и Informix Dynamic Server (IDS)………………………………………………………………….. 188
PDO Microsoft SQL Server………………………………………………………………………………………………………… 188
PDO MySQL…………………………………………………………………………………………………………………………….. 188
PDO Oracle………………………………………………………………………………………………………………………………. 189
PDO PostgreSQL………………………………………………………………………………………………………………………. 189
PDO SQLite……………………………………………………………………………………………………………………………… 189
Firebird/Interbase……………………………………………………………………………………………………………………….. 190
Zend_Db_Statement……………………………………………………………………………………………………………………………. 191
Создание оператора………………………………………………………………………………………………………………………… 191
Выполнение оператора……………………………………………………………………………………………………………………. 191
Извлечение результатов выполнения оператора SELECT…………………………………………………………………… 192
Извлечение одной строки из набора результатов……………………………………………………………………………….. 192
Извлечение всего набора результатов……………………………………………………………………………………………….. 193
Изменение формата извлечения………………………………………………………………………………………………………. 193
Извлечение одного столбца из набора результатов…………………………………………………………………………….. 194
Извлечение строки в виде объекта……………………………………………………………………………………………………. 194
Zend_Db_Profiler………………………………………………………………………………………………………………………………… 195
Введение……………………………………………………………………………………………………………………………………….. 195
Использование профилировщика……………………………………………………………………………………………………… 196
Расширенное использование профилировщика………………………………………………………………………………….. 197
Фильтрация по времени выполнения запроса…………………………………………………………………………………….. 198
Фильтрация по типу запроса……………………………………………………………………………………………………………… 198
Получение профилей по типу запроса……………………………………………………………………………………………….. 199
Специализированные профилировщики……………………………………………………………………………………………. 199
Profiling with Firebug…………………………………………………………………………………………………………………………. 199
Zend_Db_Select………………………………………………………………………………………………………………………………….. 201
Обзор…………………………………………………………………………………………………………………………………………….. 201
Создание объекта Select…………………………………………………………………………………………………………………… 201
Построение запросов Select……………………………………………………………………………………………………………… 201
Добавление предложения FROM………………………………………………………………………………………………………. 202
Добавление колонок……………………………………………………………………………………………………………………….. 203
Добавление столбцов выражений…………………………………………………………………………………………………….. 204
Добавление столбцов в существующую таблицу FROM или JOIN…………………………………………………………… 205
Добавление в запрос другой таблицы c помощью JOIN………………………………………………………………………… 206
Добавление предложения WHERE…………………………………………………………………………………………………….. 209
Добавление предложения GROUP BY………………………………………………………………………………………………… 211
Добавление предложения HAVING…………………………………………………………………………………………………… 211
Добавление предложения ORDER BY…………………………………………………………………………………………………. 212
Добавление предложения LIMIT……………………………………………………………………………………………………….. 213
Добавление модификатора DISTINCT…………………………………………………………………………………………………. 214
Добавление модификатора FOR UPDATE……………………………………………………………………………………………. 214
Произведение запросов на выборку………………………………………………………………………………………………….. 214
Произведение запросов на выборку из адаптера БД……………………………………………………………………………. 214
Произведение запросов на выборку через объект Select……………………………………………………………………… 214
Преобразование объекта Select в SQL-строку……………………………………………………………………………………… 215
Другие методы……………………………………………………………………………………………………………………………….. 215
Получение частей объекта Select………………………………………………………………………………………………………. 215
Сброс частей запроса в объекте Select……………………………………………………………………………………………….. 216
Zend_Db_Table…………………………………………………………………………………………………………………………………… 218
Класс таблицы – введение………………………………………………………………………………………………………………… 218
Определение класса таблицы…………………………………………………………………………………………………………… 218
Определение имени и схемы таблицы………………………………………………………………………………………………. 218
Определение первичного ключа таблицы………………………………………………………………………………………….. 219
Переопределение методов установки таблицы………………………………………………………………………………….. 220
Инициализация таблицы………………………………………………………………………………………………………………….. 220
Создание экземпляра класса таблицы……………………………………………………………………………………………….. 221
Установка адаптера БД…………………………………………………………………………………………………………………….. 221
Установка используемого по умолчанию адаптера БД…………………………………………………………………………. 221
Хранение адаптера БД в реестре………………………………………………………………………………………………………. 222
Добавление строк в таблицу…………………………………………………………………………………………………………….. 222
Использование таблицы с автоинкрементным ключом……………………………………………………………………….. 223
Использование таблицы с последовательностью………………………………………………………………………………… 223
Использование таблицы с естественным ключом……………………………………………………………………………….. 224
Обновление строк в таблице…………………………………………………………………………………………………………….. 224
Удаление строк из таблицы………………………………………………………………………………………………………………. 225
Извлечение строк по первичному ключу……………………………………………………………………………………………. 225
Извлечение наборов строк……………………………………………………………………………………………………………….. 227
API для произведения выборки………………………………………………………………………………………………… 227
Извлечение набора строк………………………………………………………………………………………………………….. 228
Расширенное использование…………………………………………………………………………………………………….. 229
Извлечение одной строки………………………………………………………………………………………………………………… 230
Получение метаданных таблицы………………………………………………………………………………………………………. 231
Кэширование метаданных таблицы…………………………………………………………………………………………………… 231
Расширение класса таблицы…………………………………………………………………………………………………………….. 233
Использование собственных классов строки и набора строк…………………………………………………….. 233
Определение собственной логики для добавления, обновления и удаления строк…………………….. 235
Определение собственных методов для поиска………………………………………………………………………… 235
Определение инфлекции в Zend_Db_Table……………………………………………………………………………….. 236
Zend_Db_Table_Row…………………………………………………………………………………………………………………………… 238
Введение……………………………………………………………………………………………………………………………………….. 238
Извлечение строки………………………………………………………………………………………………………………………….. 238
Чтение значений столбцов из строки…………………………………………………………………………………………………. 238
Получение данных строки в виде массива………………………………………………………………………………………….. 238
Извлечение данных из связанных таблиц…………………………………………………………………………………………… 239
Редактирование строк в БД………………………………………………………………………………………………………………. 239
Изменение значений столбцов в строке……………………………………………………………………………………. 239
Вставка новой строки………………………………………………………………………………………………………………. 239
Изменение значений в нескольких столбцах………………………………………………………………………………………. 240
Удаление строки……………………………………………………………………………………………………………………………… 241
Сериализация и десериализация строк………………………………………………………………………………………………. 241
Сериализация объекта строки…………………………………………………………………………………………………………… 241
Десериализация данных строки………………………………………………………………………………………………………… 241
Восстановление соединения для объекта строки………………………………………………………………………………… 242
Расширение класса строки……………………………………………………………………………………………………………….. 242
Инициализация строки…………………………………………………………………………………………………………………….. 243
Определение собственной логики для добавления, обновления и удаления в Zend_Db_Table_Row…………. 243
Определение инфлекции в Zend_Db_Table_Row………………………………………………………………………………… 245
Zend_Db_Table_Rowset……………………………………………………………………………………………………………………….. 247
Введение……………………………………………………………………………………………………………………………………….. 247
Получение набора строк………………………………………………………………………………………………………………….. 247
Получение строк из набора………………………………………………………………………………………………………………. 247
Получение набора строк в виде массива…………………………………………………………………………………………….. 248
Сериализация и десериализация наборов строк………………………………………………………………………………….. 249
Расширение класса набора строк………………………………………………………………………………………………………. 250
Связи между таблицами Zend_Db_Table………………………………………………………………………………………………… 252
Введение……………………………………………………………………………………………………………………………………….. 252
Определение связей……………………………………………………………………………………………………………………….. 252
Извлечение зависимых строк……………………………………………………………………………………………………………. 254
Извлечение родительской строки……………………………………………………………………………………………………… 256
Извлечение строк через связи “многие-ко-многим”…………………………………………………………………………….. 257
Каскадные операции записи……………………………………………………………………………………………………………… 260
Примечания относительно каскадных операций…………………………………………………………………………………. 261
Zend_Debug………………………………………………………………………………………………………………………………………… 263
Дамп переменных……………………………………………………………………………………………………………………………… 263
Отладка с применением Zend_Log…………………………………………………………………………………………………….. 263
Zend_Dom…………………………………………………………………………………………………………………………………………… 264
Введение…………………………………………………………………………………………………………………………………………… 264
Zend_Dom_Query……………………………………………………………………………………………………………………………….. 264
Теория работы………………………………………………………………………………………………………………………………… 264
Доступные методы………………………………………………………………………………………………………………………….. 266
Zend_Dom_Query……………………………………………………………………………………………………………………………. 266
Zend_Dom_Query_Result………………………………………………………………………………………………………………….. 266
Zend_Exception…………………………………………………………………………………………………………………………………… 267
Использование исключений………………………………………………………………………………………………………………… 267
Basic usage…………………………………………………………………………………………………………………………………………. 267
Previous Exceptions……………………………………………………………………………………………………………………………… 267
Zend_Filter………………………………………………………………………………………………………………………………………….. 269
Введение…………………………………………………………………………………………………………………………………………… 269
Что есть фильтр?……………………………………………………………………………………………………………………………… 269
Основы использования фильтров………………………………………………………………………………………………………. 269
Использование статического метода get()………………………………………………………………………………………….. 269
Цепочки фильтров……………………………………………………………………………………………………………………………… 270
Написание фильтров…………………………………………………………………………………………………………………………… 271
Zend_Form………………………………………………………………………………………………………………………………………….. 272
Zend_Form…………………………………………………………………………………………………………………………………………. 272
Zend_Form – Быстрый старт………………………………………………………………………………………………………………….. 272
Создание объекта формы…………………………………………………………………………………………………………………. 272
Добавление элементов в форму……………………………………………………………………………………………………….. 272
Визуализация формы……………………………………………………………………………………………………………………….. 274
Проверка корректности данных формы……………………………………………………………………………………………… 276
Получение статуса ошибки……………………………………………………………………………………………………………….. 276
Объединяя изложенное…………………………………………………………………………………………………………………… 277
Использование объекта Zend_Config…………………………………………………………………………………………………. 278
Заключение……………………………………………………………………………………………………………………………………. 279
Zend_Http…………………………………………………………………………………………………………………………………………… 280
Zend_Http_Client – Введение………………………………………………………………………………………………………………… 280
Введение……………………………………………………………………………………………………………………………………….. 280
Параметры конфигурации………………………………………………………………………………………………………………… 280
Выполнение базовых HTTP-запросов…………………………………………………………………………………………………. 281
Добавление параметров GET и POST………………………………………………………………………………………………….. 281
Получение последних запроса и ответа……………………………………………………………………………………………… 282
Zend_Json…………………………………………………………………………………………………………………………………………… 284
Введение…………………………………………………………………………………………………………………………………………… 284
Основы применения…………………………………………………………………………………………………………………………… 284
Объекты JSON……………………………………………………………………………………………………………………………………. 284
XML to JSON conversion……………………………………………………………………………………………………………………….. 285
Zend_Layout……………………………………………………………………………………………………………………………………….. 287
Введение…………………………………………………………………………………………………………………………………………… 287
Zend_Layout – Быстрый старт………………………………………………………………………………………………………………… 287
Скрипты макетов…………………………………………………………………………………………………………………………….. 287
Использование Zend_Layout с MVC Zend Framework-а…………………………………………………………………………. 288
Использование Zend_Layout как отдельной компоненты…………………………………………………………………….. 290
Пример макета……………………………………………………………………………………………………………………………….. 292
Опции конфигурирования Zend_Layout…………………………………………………………………………………………………. 293
Примеры………………………………………………………………………………………………………………………………………… 293
Использование Zend_Layout для опытных разработчиков……………………………………………………………………….. 295
Собственные объекты вида………………………………………………………………………………………………………………. 295
Собственные плагины фронт-контроллера…………………………………………………………………………………………. 297
Собственные помощники действий…………………………………………………………………………………………………… 297
Собственное определение пути к скрипту макета: использование инфлектора………………………………………. 297
Zend_Loader……………………………………………………………………………………………………………………………………….. 299
Динамическая загрузка файлов и классов………………………………………………………………………………………………. 299
Zend_Loader vs. require_once()………………………………………………………………………………………………………….. 299
Загрузка файлов………………………………………………………………………………………………………………………………. 299
Загрузка классов……………………………………………………………………………………………………………………………… 299
Проверка на возможность чтения из файла…………………………………………………………………………………………. 300
Использование автозагрузчика…………………………………………………………………………………………………………. 300
Автозагрузчик…………………………………………………………………………………………………………………………………….. 302
Использование автозагрузчика…………………………………………………………………………………………………………. 302
Итерфейс автозагрузчика…………………………………………………………………………………………………………………. 303
Справка по автозагрузчику……………………………………………………………………………………………………………….. 303
Zend_Mail…………………………………………………………………………………………………………………………………………… 310
Введение…………………………………………………………………………………………………………………………………………… 310
Начало работы………………………………………………………………………………………………………………………………… 310
Конфигурирование транспорта, используемого по умолчанию…………………………………………………………….. 310
Отправка через SMTP………………………………………………………………………………………………………………………….. 311
Отправка нескольких сообщений за одно SMTP-соединение…………………………………………………………………… 311
Использование различных транспортов………………………………………………………………………………………………… 312
Сообщение в формате HTML………………………………………………………………………………………………………………… 313
Вложения………………………………………………………………………………………………………………………………………….. 313
Добавление получателей……………………………………………………………………………………………………………………. 314
Контроль за разделителями MIME……………………………………………………………………………………………………….. 314
Дополнительные заголовки………………………………………………………………………………………………………………… 314
Наборы символов……………………………………………………………………………………………………………………………….. 314
Кодировка…………………………………………………………………………………………………………………………………………. 315
SMTP-аутентификация………………………………………………………………………………………………………………………… 315
Securing SMTP Transport………………………………………………………………………………………………………………………. 316
Zend_Navigation…………………………………………………………………………………………………………………………………. 317
Введение…………………………………………………………………………………………………………………………………………… 317
Страницы и контейнеры…………………………………………………………………………………………………………………… 317
Страницы……………………………………………………………………………………………………………………………………….. 317
Контейнеры……………………………………………………………………………………………………………………………………. 317
Разделение данных (модели) и отображения (вида)…………………………………………………………………………… 317
Страницы…………………………………………………………………………………………………………………………………………… 318
Общие функциональные возможности страниц…………………………………………………………………………………… 318
Zend_Navigation_Page_Mvc………………………………………………………………………………………………………………. 320
Zend_Navigation_Page_Uri………………………………………………………………………………………………………………… 323
Creating custom page types………………………………………………………………………………………………………………… 323
Creating pages using the page factory…………………………………………………………………………………………………… 324
Zend_Paginator…………………………………………………………………………………………………………………………………… 327
Введение…………………………………………………………………………………………………………………………………………… 327
Использование…………………………………………………………………………………………………………………………………… 327
Разбиение наборов данных на страницы……………………………………………………………………………………………. 327
Адаптеры DbSelect и DbTableSelect……………………………………………………………………………………………………. 328
Рендеринг страниц через скрипты видов……………………………………………………………………………………………. 329
Примеры постраничной навигации……………………………………………………………………………………………………. 331
Список свойств………………………………………………………………………………………………………………………………… 333
Конфигурация…………………………………………………………………………………………………………………………………….. 334
Расширенное использование………………………………………………………………………………………………………………. 334
Создание собственных адаптеров к источникам данных………………………………………………………………………. 334
Создание своих стилей прокрутки……………………………………………………………………………………………………… 334
Возможности кэширования………………………………………………………………………………………………………………. 335
Интерфейс Zend_Paginator_AdapterAggregate…………………………………………………………………………………….. 336
Zend_Registry……………………………………………………………………………………………………………………………………… 338
Использование реестра………………………………………………………………………………………………………………………. 338
Установка значений в реестре…………………………………………………………………………………………………………… 338
Получение значений из реестра………………………………………………………………………………………………………… 338
Создание объекта реестра……………………………………………………………………………………………………………….. 338
Доступ к реестру как к массиву………………………………………………………………………………………………………….. 339
Доступ к реестру как к объекту…………………………………………………………………………………………………………. 339
Проверка существования индекса……………………………………………………………………………………………………… 340
Создание подклассов……………………………………………………………………………………………………………………….. 341
Уничтожение статического реестра…………………………………………………………………………………………………… 341
Zend_Search_Lucene…………………………………………………………………………………………………………………………… 341
Обзор……………………………………………………………………………………………………………………………………………….. 341
Введение……………………………………………………………………………………………………………………………………….. 341
Объекты документа и поля………………………………………………………………………………………………………………. 342
Значение типов полей……………………………………………………………………………………………………………………… 344
HTML-документы…………………………………………………………………………………………………………………………….. 344
Индексация……………………………………………………………………………………………………………………………………….. 347
Создание нового индекса…………………………………………………………………………………………………………………. 347
Обновление индекса………………………………………………………………………………………………………………………….. 347
Обновление документов………………………………………………………………………………………………………………….. 347
Получение размера индекса…………………………………………………………………………………………………………….. 348
Оптимизация индекса………………………………………………………………………………………………………………………. 348
Опция автоматической оптимизации MaxBufferedDocs………………………………………………………………………… 350
Опция автоматической оптимизации MaxMergeDocs…………………………………………………………………………… 350
Опция автоматической оптимизации MergeFactor……………………………………………………………………………….. 350
Ограничения…………………………………………………………………………………………………………………………………… 351
Поиск по индексу……………………………………………………………………………………………………………………………….. 351
Построение запросов………………………………………………………………………………………………………………………. 351
Парсинг запроса………………………………………………………………………………………………………………………………. 352
Результаты поиска……………………………………………………………………………………………………………………………… 353
Ранжирование результата………………………………………………………………………………………………………………… 354
Сортировка результатов поиска………………………………………………………………………………………………………… 354
Подсветка результатов поиска………………………………………………………………………………………………………….. 355
Язык запросов……………………………………………………………………………………………………………………………………. 355
Элементы………………………………………………………………………………………………………………………………………. 355
Поля………………………………………………………………………………………………………………………………………………. 356
Модификаторы элементов……………………………………………………………………………………………………………….. 356
Поиск по критерию близости…………………………………………………………………………………………………………….. 356
Усиление элемента…………………………………………………………………………………………………………………………. 357
Булевы операторы………………………………………………………………………………………………………………………….. 357
AND………………………………………………………………………………………………………………………………………… 357
OR…………………………………………………………………………………………………………………………………………… 357
NOT…………………………………………………………………………………………………………………………………………. 358
Операторы &&, ||, и !………………………………………………………………………………………………………………………. 358
+………………………………………………………………………………………………………………………………………………. 358
-……………………………………………………………………………………………………………………………………………….. 358
Отсутствие оператора………………………………………………………………………………………………………………………. 358
Групирование…………………………………………………………………………………………………………………………………. 358
Группирование полей……………………………………………………………………………………………………………………… 359
Экранирование специальных символов……………………………………………………………………………………………… 359
API для построения запросов……………………………………………………………………………………………………………….. 360
Исключения, бросаемые парсером запросов……………………………………………………………………………………… 360
Простой запрос (запрос по одному ключевому слову)………………………………………………………………………….. 360
Составной запрос (запрос по нескольким ключевым словам)……………………………………………………………….. 360
Фразовый запрос…………………………………………………………………………………………………………………………….. 362
Кодировки…………………………………………………………………………………………………………………………………………. 365
Поддержка UTF-8 и однобайтных наборов символов…………………………………………………………………………… 365
Используемый по умолчанию анализатор текста………………………………………………………………………………… 365
Совместимый с UTF-8 анализатор текста…………………………………………………………………………………………….. 365
Расширяемость………………………………………………………………………………………………………………………………….. 366
Анализ текста………………………………………………………………………………………………………………………………….. 366
Фильтрация лексем…………………………………………………………………………………………………………………………. 368
Алгоритмы ранжирования………………………………………………………………………………………………………………… 370
Контейнеры хранения……………………………………………………………………………………………………………………… 371
Взаимодействие с Java Lucene………………………………………………………………………………………………………………. 375
Форматы файлов……………………………………………………………………………………………………………………………… 375
Директория для индекса………………………………………………………………………………………………………………….. 375
Исходный код Java…………………………………………………………………………………………………………………………… 375
Zend_Session………………………………………………………………………………………………………………………………………. 376
Введение…………………………………………………………………………………………………………………………………………… 376
Базовое использование………………………………………………………………………………………………………………………. 377
Учебные примеры…………………………………………………………………………………………………………………………… 377
Итерация по пространствам имен……………………………………………………………………………………………………… 378
Методы доступа для пространств имен……………………………………………………………………………………………… 378
Расширенное использование………………………………………………………………………………………………………………. 380
Старт сессии……………………………………………………………………………………………………………………………………. 380
Блокировка пространств имен………………………………………………………………………………………………………….. 381
Время жизни пространства имен……………………………………………………………………………………………………….. 382
Инкапсуляция сессий и контроллеры…………………………………………………………………………………………………. 383
Ограничение количества экземпляров Zend_Session_Namespace до одного на каждое пространство имен.. 384
Работа с массивами в пространствах имен………………………………………………………………………………………….. 385
Использование сессий вместе с аутентификацией……………………………………………………………………………….. 386
Использование сессий с юнит-тестами……………………………………………………………………………………………….. 387
Общее управление сессиями……………………………………………………………………………………………………………….. 390
Zend_Session::setOptions()……………………………………………………………………………………………………………….. 390
Опции……………………………………………………………………………………………………………………………………………. 391
regenerateId()…………………………………………………………………………………………………………………………………. 392
Введение: идентификаторы сессий…………………………………………………………………………………………… 392
Угон и фиксация сессии…………………………………………………………………………………………………………… 394
rememberMe(integer $seconds)…………………………………………………………………………………………………………. 395
forgetMe()………………………………………………………………………………………………………………………………………. 396
sessionExists()………………………………………………………………………………………………………………………………….. 396
destroy(bool $remove_cookie = true, bool $readonly = true)……………………………………………………………………. 396
stop()……………………………………………………………………………………………………………………………………………… 396
writeClose($readonly = true)………………………………………………………………………………………………………………. 396
expireSessionCookie()……………………………………………………………………………………………………………………….. 397
setSaveHandler(Zend_Session_SaveHandler_Interface $interface)……………………………………………………………. 397
namespaceIsset($namespace)……………………………………………………………………………………………………………. 397
namespaceUnset($namespace)………………………………………………………………………………………………………….. 397
namespaceGet($namespace)……………………………………………………………………………………………………………… 397
getIterator()…………………………………………………………………………………………………………………………………….. 398
Zend_Validate…………………………………………………………………………………………………………………………………….. 399
Введение…………………………………………………………………………………………………………………………………………… 399
Что такое валидатор?………………………………………………………………………………………………………………………. 399
Базовое использование валидаторов…………………………………………………………………………………………………. 399
Установка собственных сообщений от ошибках…………………………………………………………………………………… 400
Использование статического метода is()…………………………………………………………………………………………….. 401
Перевод сообщений………………………………………………………………………………………………………………………… 402
Цепочки валидаторов…………………………………………………………………………………………………………………………. 402
Написание валидаторов………………………………………………………………………………………………………………………. 403
Zend_View………………………………………………………………………………………………………………………………………….. 408
Введение…………………………………………………………………………………………………………………………………………… 408
Скрипт контроллера………………………………………………………………………………………………………………………… 408
Скрипт вида……………………………………………………………………………………………………………………………………. 408
Опции……………………………………………………………………………………………………………………………………………. 409
Короткие теги в скриптах вида………………………………………………………………………………………………………….. 410
Вспомогательные аксессоры…………………………………………………………………………………………………………….. 411
Скрипты контроллеров……………………………………………………………………………………………………………………….. 411
Установка переменных……………………………………………………………………………………………………………………. 411
Выполнение скрипта вида………………………………………………………………………………………………………………… 412
Пути к скриптам вида……………………………………………………………………………………………………………………….. 412
Скрипты видов…………………………………………………………………………………………………………………………………… 413
Экранирование вывода……………………………………………………………………………………………………………………. 414
Использование других шаблонизаторов…………………………………………………………………………………………….. 415
Шаблонизаторы c использованием скриптов видов…………………………………………………………………………….. 415
Шаблонизаторы с использованием Zend_View_Interface……………………………………………………………………… 416
Помощники видов………………………………………………………………………………………………………………………………. 422
Начальный набор помощников…………………………………………………………………………………………………………….. 422
Помощник Action…………………………………………………………………………………………………………………………….. 426
Zend_Acl
Введение
Zend_Acl предоставляет легковесную и гибкую реализацию списка прав доступа (ACL) и управления привилегиями. Приложение может использовать такие списки для контроля доступа одних объектов к другим – защищенным.
В рамках данной документации,
- Ресурс – объект, доступ к которому контролируется.
- Роль – объект, который может запрашивать доступ к ресурсу.
Говоря проще, роли запрашивают доступ к ресурсам. Например, если парковщик запрашивает доступ к автомобилю, то парковщик – это роль, а автомобиль – ресурс, поскольку доступ к автомобилю не может предоставляться всем без исключения.
Благодаря спецификации и использованию списка прав доступа (ACL) приложение может контролировать предоставление ролям доступа к ресурсам.
Ресурсы
Создать ресурс в Zend_Acl очень просто. Zend_Acl предоставляет интерфейс ресурса Zend_Acl_Resource_Interface для облегчения процесса создания ресурса. Этот интерфейс содержит только один метод, getResourceId
()
. Классу достаточно реализовывать этот интерфейс для того, чтобы Zend_Acl рассматривал объект этого класса как ресурс. Кроме того, Zend_Acl предоставляет Zend
_
Acl
_
Resource
в качестве базового класса, который разработчики могут расширять по желанию.
Zend_Acl предоставляет древовидную структуру, в которую могут добавляться различные ресурсы. В этой структуре они могут быть организованы от общих (корень дерева) к специфическим (листья дерева). При запросах к определенным ресурсам в иерархии будет выполнен автоматический поиск правил, относящихся к ресурсам-предкам, учитывающий простое наследование правил. Например, если некое общее правило должно действовать в каждом здании города, то проще прикрепить его к городу, чем крепить к каждому зданию в городе. Однако, для некоторых зданий могут потребоваться исключения из этого правила, в Zend_Acl это достигается путем закрепления исключений за каждым зданием, требующим исключений из правила. Ресурс может наследовать только от одного родительского ресурса, однако сам родительский ресурс может, в свою очередь, наследовать от другого родительского ресурса и т.д.
Zend_Acl также поддерживает права доступа к ресурсам (например, “создание”, “чтение”, “обновление”, “удаление”), разработчик может присваивать правила, которые будут влиять на все или определенные права доступа к ресурсу.
Роли
Как и в случае с ресурсами, создавать роль тоже очень просто. Все роли должны реализовывать интерфейс Zend_Acl_Role_Interface. Этот интерфейс содержит единственный метод getRoleId
()
. Кроме того, Zend_Acl предоставляет Zend_Acl_Role в качестве базового класса, который разработчики могут расширять по желанию.
В Zend_Acl роль может наследовать от одной или от нескольких ролей. Это реализовано для поддержки наследования правил между ролями. Например, пользовательская роль, такая как “Салли”, может принадлежать одной или нескольким родительским ролям, таким как “редактор” и “администратор”. Разработчик может привязывать правила к “редактору” и “администратору” раздельно, и “Салли” будет наследовать правила обоих ролей. Нет необходимости привязывать правила непосредственно к “Салли”.
Хотя множественное наследование ролей – очень полезная возможность, она также усложняет разработку. Следующий пример демонстрирует неопределенное условие и показывает, как Zend_Acl решает эту проблему.
Example #1 Множественное наследование ролей
Следующий код определяет три базовые роли: “guest
“, “member
” и “admin
“, от которых будут наследовать другие роли. Далее создается “someUser
“, он наследует от этих только что созданных трех ролей. Порядок, в котором эти роли появляются в массиве $parents, важен. При необходимости Zend_Acl ищет правила доступа не только для запрашиваемых ролей (в нашем случае, “someUser
“), но и для ролей, от которых запрашиваемая роль унаследована (в нашем примере, “guest
“, “member
” и “admin
“):
1. $acl = new Zend_Acl();
2.
3. $acl->addRole(new Zend_Acl_Role(‘guest’))
4. ->addRole(new Zend_Acl_Role(‘member’))
5. ->addRole(new Zend_Acl_Role(‘admin’));
6.
7. $parents = array(‘guest’, ‘member’, ‘admin’);
8. $acl->addRole(new Zend_Acl_Role(‘someUser’), $parents);
9.
10.$acl->add(new Zend_Acl_Resource(‘someResource’));
11.
12.$acl->deny(‘guest’, ‘someResource’);
13.$acl->allow(‘member’, ‘someResource’);
14.
15.echo $acl->isAllowed(‘someUser’, ‘someResource’) ? ‘разрешен’ : ‘запрещен’;
Поскольку нет правил, определенных специально для роли “someUser
” и ресурса “someResource
“, то Zend_Acl должен производить поиск правил, которые могут быть определены для ролей, от которых “someUser
” наследуется. Сперва проверяется роль “admin
“, и обнаруживается, что для нее не определены правила доступа. Затем проверяется роль “member
“, и Zend_Acl обнаруживает, что есть правило разрешающее доступ для “member
” к “someResource
“.
Download Zend Framework Reference