Beginner — Помогите поднять Zend 2 проект


Zend framework 2

Содержание

Введение в Zend Framework 2. Обзор и установка [ править ]

Обзор [ править ]

Zend Framework 2 является фреймворком с открытым исходным кодом для разработки ВЕБ-приложений на PHP 5.3+. Использует только объектно — ориентированный код и все новшества PHP 5.3, такие как: namespaces (Пространства имен) , late static binding (Позднее статическое связывание), lambda functions and closures (Анонимные функции и замыкания).

Zend Framework 2 эволюционировал от Zend Framework 1 — популярного фреймворка с более чем 15 миллионами сайтов использующих его.

Важно: ZF2 не является обратно совместимым с ZF1 так как использует все новшества PHP 5.3+. Так же были переписаны все компоненты ядра.

Каждый компонент Zend Framework 2 является уникальным и разработан с минимальными зависимостями от других компонентов. ZF2 следует независимому принципу создания приложений. Такая слабосвязанная архитектура позволяет разработчикам использовать только те компоненты, которые им необходимы.Так же используется Pyrus и Composer для установки и отслеживания зависимостей как для всего проекта в целом так и для каждого из компонентов.

Для тестирования кода используются PHPUnit и Travis CI.

Хотя каждый компонент Zend Framework 2 может быть использован отдельно, стандартный набор библиотек делает его очень мощным и расширяемым средством разработки ВЕБ-приложений. Кроме того, он предлагает надежную и высокопроизводительную реализацию MVC , абстракцию базы данных, которая проста в использовании, формы, реализующие HTML5 формы визуализации, проверки и фильтры, так что разработчики могут объединить все эти возможности с помощью одного простого и объектно-ориентированного интерфейса. Другие компоненты, такие как Authentication и Acl, обеспечивают аутентификацию и авторизацию пользовательских учетных данных.

Также, с пространтсвом имен ZendService возможен легкий доступ к большинству самых популярных ВЕБ-сервисов. Независимо от того, какой проект вы хотите реализовать, скорее всего найдете всё необходимое для быстрого и качественного создания в ядре Zend Framework 2.

Главным спонсором проекта Zend Framework 2 является Zend Technologies , но большой вклад в его развитие внесли такие компании, как Google, Microsoft, и StrikeIron. Они помогли в разработке множества интерфейсов для различных ВЕБ-сервисов и других технологий, которые разработчики хотят видеть доступными в Zend Framework 2.

Если у Вас возникают какие-либо вопросы по Zend Framework 2 Вы можете обратиться за советом к нашему сообществу через IRC, сайты, форумы или почту. Наша команда всегда поможет Вам!

Быстрый Старт. Начало работы с Zend Framework 2 [ править ]

Вступление [ править ]

Это руководство предназначено для ознакомления с основами написания ВЕБ — приложений на Zend Framework 2: создание простого приложения использующего базу данных и Model-View-Controller парадигму. После прочтения и выполнения всех примеров в статье Вы получите полностью работоспособное приложение(сайт) на основе которого сможете продолжить дальнейшие самообучение и разобраться в коде и принципах работы.

Исходные тексты приложения Вы можете скачать из репозитория [1]

Начальные настройки [ править ]

Предполагается, что Вы запустили PHP 5.3.10+ на Веб — сервере Apache и базой данных MySQL доступной через PDO. Сервер Apache должен поддерживать режим mod_rewrite.

Вы также должны убедиться, что Apache настроен на поддержку .htaccess файлов. Это обычно делается путем изменения настройки:

в файле httpd.conf. Если же Вы не уверены в настройках — обратитесь к соответствующей документации по Apache. Так как если эти требования не будут выполнены Вы не сможете перейти с главной страницы в приложении описанном в этом справочнике на другие.

Описание приложения [ править ]

Мы собираемся построить простое приложение, которое будет показывать доступные альбомы и имена исполнителей на главной странице. Так же будет возможность добавлять, редактировать и удалять альбомы. В итоге будет 4 страницы:

  • List of albums — на этой странице будет показана информация о названии и исполнителе альбома. Так же будут ссылки на страницы для редактирования, удаления, добавления альбомов.
  • Add new album — страница с формой для добавления нового альбома.
  • Edit album — страница с формой для редактирования нового альбома.
  • Delete album — страница для удаления альбома.


Информацию будем хранить в базе данных. Для этого нужно будет создать таблицу с 3 полями:

Beginner — Помогите поднять Zend 2 проект

Users Module — README

Setup Zend Server

Setup MySQL Server

Point vHost comm-app.local to /public

Copy Users Module to /modules/

  • Run all the SQL files in /modules/Users/sql/ folders

DB Adapter Setup

Add the following configuration to /config/autoload/global.php

  • © 2020 GitHub , Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Help

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Beginner — Помогите поднять Zend 2 проект

Теперь, когда у нас есть настроенное и работающее скелетное приложение, мы захотим что-нибудь поменять в нем в будущем. Чтобы без проблем управлять структурой каталогов, изменять файлы и отлаживать сайт, обычно используют интегрированную среду разработки (Integrated Development Environment или IDE). В этой книге мы используем среду разработки NetBeans. (О том, как ее установить, читайте в Приложение A. Организация среды веб-разработки).

Чтобы создать проект для нашего скелетного приложения в NetBeans, запустите среду разработки и выберите Файл->Создать проект. . Откроется диалоговое окно Новый проект (см. рисунок 2.4).


Рисунок 2.4. Создание проекта в NetBeans — страница выбора проекта

На появившейся странице Выберите проект (Choose Project), вам надо выбрать тип проекта — PHP, затем в списке справа выбрать Приложения с существующими исходниками (PHP Application with Existing Sources) (так как у нас уже есть код скелетного приложения). Затем нажмите кнопку Далее, чтобы перейти на следующую страницу (см. рисунок 2.5).

Рисунок 2.5. Создание проекта в NetBeans — Страница имени и местоположения

На странице Имя и местоположение (Name and location) вам надо ввести путь к вашему коду (например, /home/username/helloworld), имя проекта (например, helloworld ) и указать версию PHP, которую вы используете (PHP 5.6 или новее). Версия PHP нужна NetBeans для проверки синтаксиса PHP, которая проверит ваш код на наличие ошибок и укажет на них. Нажмите кнопку Далее для перехода на следующую страницу. (см. рисунок 2.6).

Рисунок 2.6. Создание проекта в NetBeans — Страница выбора конфигурации

На странице Конфигурация запуска (Run configuration), рекомендуется указать, как вы будете держать ваш сайт (Local Web Site) и URL сайта ( http://localhost ). Оставьте поле Файл индекса пустым (потому что мы используем mod_rewrite , и путь к вашему файлу index.php на самом деле, скрыт Apache). Если вы видите предупреждающее сообщение «Для запуска и отладки проекта из командной строки нужно указать файл индекса», просто проигнорируйте его.

Нажмите кнопку Завершить, чтобы создать проект. Как только проект helloworld будет успешно создан, вы должны будете увидеть окно проекта (см. рисунок 2.7).

Рисунок 2.7. Окно проекта NetBeans

В окне проекта располагаются строка меню, панель инструментов, панель Проекты, где перечислены ваши файлы проекта, и в правой части окна код файла index.php .

Больше полезных советов о NetBeans, включая запуск и интерактивную отладку сайтов с ZF3, смотрите Приложение Б. Введение в PHP-разработку в среде NetBeans.

Время для материала продвинутого уровня.

Поздравляем! Вы проделали тяжелую работую по установке и запуску Zend Skeleton Application, и теперь пришло время отдохнуть и почитать о некоторых продвинутых вещах в последней части этой главы.

Космонавт в лодке

Личный блог Олега Абражаева о программировании, технологиях и о жизни

Рубрики

  • HTML и CSS (7)
  • Java (2)
  • JavaScript (5)
  • Linux (45)
    • Debian (4)
    • Ubuntu (24)
  • MySQL (10)
  • PHP (49)
    • Doctrine (7)
    • Kohana Framework (7)
    • Symfony Framework 2 (3)
    • WordPress CMS (4)
    • Zend Framework 2 (8)
  • Ruby (2)
    • Redmine (2)


  • seo шмео (6)
  • Просто мысли (110)

Облако меток

Свежие комментарии

  • PHP: include или все в один файл? — include php быстродействие — Вопросы и ответы по программированию к записи Сравнение производительности автозагрузки и объединения классов в один файл
  • Новичёк к записи Satis: создание вашего собственного Composer репозитория
  • Самарка к записи Что делать с ошибкой W: Possible missing firmware /lib/firmware/rtl_nic/rtl8105e-1.fw for module r8169
  • Saskozp к записи Фикс Bootstrap 3 Navigation dropdown submenu и реализация в Zend Framework 2 и Smarty
  • seoonly.ru к записи Список полезных команд для Linux (Ubuntu, Debian) – ОБНОВЛЯЕМЫЙ

livelib.ru

Подписаться на обновления!

Создание собственного View Helper в Zend Framework 2

У меня была задача для сайта, который я делал на фрилансе.
Задача следующая – есть модуль Page, который для этого же проекта и был написан. Он достаточно прост, в нем происходит сохранение страниц в бд, поиск, роутинг к страницам вида “/page/pagename/” и базовые шаблоны.

Но по функционалу и дизайну сайта необходимо было выводить некоторые страницы с предпросмотром на главную (или где угодно).

И поможет в решении данной задачи конечно же Zend\View\Helper.
Я хотел вызывать в view шаблонах некий хелпер следующим образом:

Т.е. где-то в произвольном шаблоне я подгружаю по alias нужную мне страницу и вывожу с нее данные. Кстати, эта же страница открывается по адресу “/page/welcome”, но уже с полным текстом. В примере выше я показал уже конечный вариант, но именно так я его и задумывал.

Для создания своего View Helper класс должен наследоваться от Zend\View\Helper\AbstractHelper.
Для того, чтобы вызвать свой класс как хелпер, он обязательно должен реализовывать магический метод __invoke().

Далее необходимо зарегестрировать наш класс как хелпер в Service. Это можно сделать двумя способами.
Первый не очень хороший, но рабочий:

Zend Framework 2. Основы разработки

Программируете на PHP? Научитесь создавать функциональные веб‑приложения с помощью Zend Framework 2 (ZF2)! В основу этой библиотеки классов с открытым исходным кодом положен принцип «крайней простоты». Использование набора настраиваемых классов помогает упростить процесс разработки, сделав его максимально эффективным. Освоив работу с Zend Framework 2, вы повысите свою конкурентоспособность и сможете решать задачи разработки веб‑приложений любого масштаба.

Программа курса носит прикладной характер и включает лабораторные работы после каждого модуля. Вы познакомитесь с основными понятиями библиотеки, её модулями и их конфигурацией. Научитесь работать с шаблоном проектирования MVC, плагинами и контроллером. Сможете свободно использовать фильтры, формы и валидаторы. А также вносить записи в журнал и отправлять почту.


В ходе курса слушатели реализуют проект по созданию фрагмента интернет‑магазина средствами Zend Framework 2. Окончив курс, вы сможете сразу приступить к созданию собственных веб‑приложений.

Программа курса соответствует требованиям профессионального стандарта «Программист».

Модуль 1. Введение в ZF2 и основные концепции

Ключевые особенности ZF2

Как работает ZF2

Архитектура ZF и MVC

Модуль 2. Шаблоны проектирования и MVC

MVC элементы и реализация

ZF2 MVC: событийная архитектура

Ключевые события MVC

Модуль 3. Менеджеры событий

Общие события (Shared Event Listeners)

Менеджер общих событий

Модуль 4. Service Manager

Service Manager (SM)

Модуль 5. MVC и модели


Загрузка модульного приложения

Менеджер модулей (Zend\ModuleManager)

ModuleManager события и обработчики

Автозагрузка файлов модулей

Событие MVC ‘bootstrap’

Модуль 6. Контроллеры

Модуль 7. Маршрутизация

Внесении записи в журнал

Модуль 8. Слой представления

Помощники представлений (View Helpers)

Модуль 9. Валидация

Модуль 10. Работа с базой данных

Создание адаптера: быстрый старт

Подготовка и выполнение запроса

Аудиторная нагрузка в классе с преподавателем: 24 ак. ч.

По окончании курса проводится итоговая аттестация в виде теста на последнем занятии или на основании оценок практических работ, выполняемых во время обучения.


Работа с объектом Zend\View\Helper\Url, с контроллера

Извините за мой плохой английский, я из России

начал изучать zend framework 2. Образец в контроллере, readAction():

В результате заброшенное исключение:

Пожалуйста, помогите мне. что я делаю неправильно?

Вы не можете использовать viewhelper в контроллере — и вам не нужно. Там также плагин контроллера Url , который делает почти то же самое.

Плагины контроллера — это вызываемые классы, вы можете использовать их как это (контекст действия контроллера):

Все параметры являются необязательными. Для получения дополнительной информации проверьте код в Zend\Mvc\Controller\Plugin\Url или прочитайте docs.

Помощники и плагины, в то время как они могут быть напрямую созданы, обычно не должны, поскольку они, как правило, управляются с помощью PluginManager. PluginManager является подклассом ServiceManager и, как таковой, предоставляет множество функций для создания плагинов, включая инъекцию стандартных соавторов, использование заводов для обеспечения инъекции зависимостей и т.д.

В случае хелпера Url существует factory, который гарантирует, что он сконфигурирован сконфигурированный маршрутизатор — если вы его создаете напрямую, у вас его не будет, и он не сможет выполнить его работа, как вы заметили!

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

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

Я использую smarty как средство визуализации рендеринга, а в smarty вы не можете использовать php-коды в представлениях, поэтому все должно быть сделано в контроллере, выделяя их в переменных, а затем передавая их в представления.

Вы можете использовать это:

Если вы следуете руководству zend 2, он будет выглядеть следующим образом:

Это будет иметь значение:

Как вы можете видеть, вам нужно добавить к нему имя сервера, которое вы можете сделать, используя их до генерации URL-адреса маршрута:

В целом, фрагмент кода должен выглядеть так:

Надеемся, что это поможет пользователям beginner zf2

Zend Framework: создаем блог. Шаг 2

Продолжаем копипасту разработку блога на Zend Framework. В планах на этот раз у нас создание категорий, отображение постов в них и вывод комментариев к постам. Готовы? Поехали.

Начнем с моделей. Нам нужно вывести список категорий и при выборе определенной категории, вывести посты принадлежащие ей. Давайте добавим в нашу модель постов новый метод для выбора постов по ID’шнику категории. Вот полный код обновленной модели постов.

Как видите, мы добавили метод getByCategoryId($categoryId). Он принимает в качестве параметра ID’шник категории и возвращает посты соотвествующие ей в виде массива. Обратите внимание на условия запроса: они образуют как бы «паровозик» из методов. Также нам нужно получать данные по самой категории. А именно название (а если бы были мета-теги, то и их). Для этого нам нужно создать еще одну модель для категорий. Приведу ее код:

Здесь у нас метод, принимающий в качестве параметра ID’шник и возращающий данные по категории соответствующей ему. Теперь нам нужно создать модель для комментариев. В нем будет метод, выбирающий комментарии по ID’шнику поста. Давайте напишем его:

Давайте теперь изменим наш контроллер. Я сразу приведу готовый код и ниже поясню:


Первое изменение произошло в методе init(). В него мы добавили вывод всех категорий для отображения в сайдбаре. Изменение номер два — в методе postAction() добавлен вывод комментариев к посту. И наконец последнее измение — добавление нового метода categoryAction(). Он будет срабатывать при выборе определенной категории. Его можно добавить как ручками, так и с помощью Zend_Tool — командой «zf create action category index». При втором варианте также создастся соответствующий вид (application/views/scripts/category.phtml), иначе его надо будет добавить самому. Итак в методе categoryAction() мы получаем из параметров ID. Далее если ID больше нуля, то получаем посты, данные по категории и устанавливаем заголовок для категории.

И наконец осталось набросать вьюшку. Для начала подредактируем layout (application/layouts/scripts/layout.phtml). В месте где у нас в сайдбаре выводился список категорий, добавим реальный список из БД:

Я не стал снова приводить код всего макета, а показал сам сайдбар. Здесь просто цикл foreach, в котором выводятся категории. Все должно быть знакомо и понятно. А вот и сама вьюшка категорий (application/views/scripts/index/category.phtml):

Тут все как на главной. Ну а теперь добавим вывод комментариев в наш вид для отдельного поста (application/views/scripts/index/post.phtml):

Теперь можете запустить браузер, набрать URL вашего проекта и лицезреть результат. Поклацайте по ссылкам, все должно работать. В следующий раз займемся добавлением комментариев. Так что если вы до сих пор не подписались на RSS, самое время исправиться. На этом у меня все, до следующего поста. Исходники лежат тут.

Написание проекта в Zend Framework 2 — будет ли платформа готова к 2013 году?

Поэтому я начинаю этап разработки кода новой CMS, которую я создаю для друзей и семьи. Я хотел бы использовать Zf2. Будет ли это готово к началу 2013 года? Кажется, он очень активен в сообществе Zend.

Я посмотрел вокруг, чтобы увидеть другие мнения и отметил несколько ответов примерно год назад. Я понимаю, что он не будет стабильным, и в первых нескольких версиях будут исправлены ошибки и т.д. Но я считаю, что стоит записать его в Zf2, а не в curretn build Zf1, а затем переместить.

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

Любые мысли/советы или внутренние знания о написании большого проекта в Zf2 сейчас?

Zend Framework 2 должен быть готов к апрелю 2012 года, но если вам не нужно создавать что-то твердое и готово к изменениям (каждая бета-версия имеет большие перерывы BC), тогда просто продолжайте и пишите свои модули CMS =)

От одного из разработчиков ZF2 около 15 часов назад (во время публикации этого сообщения):

мы собираемся выпустить бета-версию на следующей неделе, после чего ZF2 войдет в RC

Таким образом, он больше похож на ZF2 RC будет доступен в середине/конце августа или в сентябре. Я думаю, они делают все возможное, чтобы ZF2 был доступен для ZendCond , 22-25 октября.

Я лично начал работать над ZF2 для проекта, с которым я хочу жить в декабре 2012 года. Я работаю над многими вещами, которые могут быть связаны с ZF2 , такими как моделирование данных, логика приложений, дизайн интерфейса. так, что с момента ZF2 RC меня будет как можно меньше работы. Я также просматриваю модули, которые разрабатываются для ZF2 чтобы увидеть, что я смогу повторно использовать, и что мне нужно будет сам кодировать.

Причинами, по которым я собираюсь перейти на ZF2 являются:
-I имеют опыт работы с ZF1 и считают, что разрыв с ZF2 будет меньше, чем для Symfony 2 .
-The, который они разработали, модули действительно ускорят разработку, так как вы сможете легко использовать код (что действительно было проблемой с ZF1 ).
— ZF2 «улучшит базовую производительность на 200-300% по сравнению с версией 1.x».

Beginner — Помогите поднять Zend 2 проект

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1

Zend Framework*
В последние несколько лет моя работа связана с использованием CMS Drupal, но на досуге я изучал и just for fun запускал проекты на питоновских фреймворках Django, Flask и Twisted. Сейчас я решил освоить основы двух-трех популярных PHP-фреймфорков и первыми я решил изучить Zend Framework 2 и Yii.

В процессе ознакомления с Zend Framework 2 я изучил туториал с официального сайта (http://framework.zend.com/manual/2.2/en/us. e/overview.html), просмотрел документацию фреймворка (http://framework.zend.com/manual/2.2/en/index.html), прочитал книгу Michael Romer “Web development with Zend Framework 2” и собрал собственное тестовое приложение.

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

  • в нем не рассказывается о работе с пользователями, сессиями и правами доступа,
  • лишь вскользь рассматривается такая основополагающая часть фреймворка как ServiceManager,
  • в качестве интерфейса с базой данных безальтернативно используется паттерн Table Gateway (и соответствующая его реализация в фреймворке),
  • используется встроенный в фреймворк шаблонизатор, который после питоновского Jinja 2 кажется совершенно неудобным и примитивным,
  • и т.д.

В итоге, более-менее удовлетворительное по функционалу приложение я смог создать после прочтения книги.

В этой статье я хочу привести пример разработки простого блога, в ней будет несколько отличий от официального туториала. В первую очередь я постараюсь заострить внимание на тех вопросах, которые во время изучения показались мне недостаточно раскрытыми в официальном туториале. Кроме того я буду использовать некоторые технологии, альтернативные тем, что используются в Zend фреймворке по умолчанию:


  • в качестве шаблонизатора будет использоваться Twig,
  • для работы с БД — Doctrine ORM,
  • для авторизации/аутентификации и распределения прав доступа я буду использовать существующие модули ZfcUser и BjyAuthorize,
  • также я рассмотрю вопросы разработки собственных валидаторов форм, View плагинов и другие.

Статья написана новичком (в Zend Framework) для новичков, по этому приветствуется любая критика по делу и советы по усовершенствованию приложения.

Статья будет разбита на 3 части:

  • в первой (текущей) части я рассмотрю структуру ZendSkeletonApplication,
  • во второй части разберу разработку собственного модуля (формы, работа с БД при помощи Doctrine ORM, разработка View-плагина),
  • третья часть будет посвящена работе с пользователями и шаблонизатором Twig.

Я предполагаю, что у вас уже есть настроенный веб-сервер (мой доступен по адресу zblog.kece.ru) и в MySQL создана пустая база данных под этот проект. Ввиду того, что для работы с БД я планирую использовать Doctrine, база данных может быть любой, поддерживаемой этой ORM.

Я предполагаю, что у вас под рукой есть исходный код ZendSkeletonApllication или моего туториала. Взять их можно тут: github.com/zendframework/ZendSkeletonApplication и тут: github.com/romka/zend-blog-example. Кроме того, я предполагаю, что вы понимаете паттерн MVC, имеете опыт работы с каким-либо шаблонизатором и валидатором форм.

Zend Framework использует замечательный менеджер зависимостей Composer, который также должен быть установлен в вашей системе. Подробнее о Композере можно прочитать вот в этой статье: habrahabr.ru/post/145946/. Если говорить в двух словах, то Composer — это утилита командной строки, которая позволяет быстро и удобно скачать и установить внешние библиотеки, от которых зависит ваш PHP-проект. На входе утилита принимает JSON-файл в интуитивно понятном формате содержащий список имен и версий зависимостей, на выходе она скачивает и устанавливает нужные библиотеки и их зависимости освобождая вас от рутинной работы.

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

Используя Zend Framework вы можете с нуля спроектировать и создать структуру вашего приложения, но для изучения работы системы лучше воспользоваться заготовкой ZendSkeletonApplication. В случае если у вас настроен Composer достаточно выполнить команду:

php composer.phar create-project —repository-url=»http://packages.zendframework.com» -s dev zendframework/skeleton-application path/to/install

(при должной настройке, команду php composer.phar можно заменить просто на composer, но далее в статье я буду приводить первый вариант как более универсальный)

После ее выполнения вы получите приложение со следующей структурой (я оставил только самые интересные директории и файлы):

config/
autoload/
global.php
application.config.php
module/
Application/

public/
css/
img/
js/
index.php
vendor/

composer.json
init_autoloader.php

Теперь вы можете открыть созданный проект. Моя версия доступна по адресу zblog.kece.ru.

Давайте детально разберем созданные директории и файлы.

Начнем с файла composer.json в корне проекта. Он имеет следующий вид:

<
«name»: «zendframework/skeleton-application»,
«description»: «Skeleton Application for ZF2»,
«license»: «BSD-3-Clause»,
«keywords»: [
«framework»,
«zf2»
],
«homepage»: «http:// framework.zend.com/»,
«require»: <
«php»: «>=5.3.3»,
«zendframework/zendframework»: «>2.2.0rc1»
>
>

В этом файле задаются параметры приложения, которые будут использоваться Композером. Самой интересной частью этого конфига является секция require, которая содержит список внешних библиотек, от которых зависит приложение. Сейчас в списке зависимостей есть только Zend Framework 2, но в будущем, мы добавим сюда еще несколько зависимостей: Доктрину, Твиг и другие. После добавления новой зависимости достаточно будет в консоли исполнить команду:

php composer.phar update

и Композер скачает необходимые библиотеки. Все внешние зависимости складываются в директорию vendor, сейчас мы в ней можем увидеть директории zendframework и composer.

Document_root нашего приложения находится не в корне проекта, а в директории public, именно здесь находится файл index.php — точка входа в наш проект и именно на работу с этой директорией должен быть настроен веб-сервер.

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

Для подключения внешних библиотек исполняется файл init_autoloader.php из корня проекта, который в свою очередь вызывает vendor/autoload.php и вслед за ним автоматически сгенерированный Композером файл vendor/composer/autoaload_real.php. В этом файле определены автолоад-методы для загруженных Композером внешних библиотек. Таким образом, когда мы в коде наших модулей будем подключать неймспейсы вида ZendViewModelViewModel PHP будет знать в каких файлах искать указанные неймспейсы.


загружает конфигурационные файлы приложения и запускает его. В процессе инициализации приложения (вызов метода ZendMvcApplication::init()) создается ServiceManager — ключевой объект, использующийся во многих частях приложения. По умолчанию СервисМенеджер создает еще один ключевой объект — EventManager. В дальнейшем, когда мы будем создавать свои модули в их настройках мы будем сообщать СервисМенеджеру какие еще объекты необходимо создать для работы нашего модуля.

О СервисМенеджере мы еще поговорим позже, а сейчас давайте подробнее рассмотрим директорию config. В ней находится файл application.config.php, возвращающий массив с конфигурацией приложения, который может рассказать много интересного.

Массив modules содержит список включенных модулей. Сейчас у нас включен только один модуль Application, но в будущем их будет больше.

Массив module_listener_options содержит два интересных элемента — массивы module_paths и config_glob_paths:

  • module_paths подсказывает где искать подключаемые модули, по умолчанию в директориях vendor — внешние зависимости, и module — здесь будут находиться модули разработанные нами для нашего проекта.
  • Config_glob_paths содержит маски путей к конфигурационным файлам модулей. Регулярное выражение ‘config/autoload/<,*.>.php’ означает, что будут загружены все файлы вида module_name..php, global.php, local.php из директории config/autoload.

Таким образом, первым делом загружаются настройки из файла config/application.config.php, затем загружаются настройки из файлов config/autoload/<,*.>.php и в последнюю очередь загружаются настройки заданные на уровне модулей (об этом мы поговорим позже).

Если в config/autoload есть два файла настроек для одного и того же модуля: глобальный и локальный (module_name.global.php и module_name.local.php), то первым делом будет загружен глобальный файл, а за ним локальный, то есть локальные настройки имеют приоритет перед глобальными.

Файлы local.php и *.local.php по умолчанию включены в файл .gitignore (если вы используете другую систему контроля версий, то их нужно добавить в исключения вручную) и они должны использоваться только для настроек, соответствующих только текущему окружению. То есть, если у вас проект в том или ином виде запускается на нескольких разных площадках: production, тестовой и девелоперских площадках, то в глобальных настройках приложения нужно хранить данные, актуальные для всех перечисленных площадок, а в локальных — уникальные для каждой площадки, например, данные для доступа к БД.

Кроме глобальных для всего приложения конфигурационных файлов каждый из модулей может иметь свой файл настроек. Такие конфигурационные файлы модулей загружаются в том порядке, в котором определен список активных модулей в файле application.config.php. Таким образом, если вы хотите в своем модуле переопределить настройки другого модуля, то ваш модуль должен быть ниже в этом списке.

Последней важной и пока еще не рассмотренной директорией является директория modules. В этой директории будут находиться модули, разработанные нами для нашего приложения. Вместе с ZendSkeletonApplication поставляется один модуль Application, но прежде чем изучать его структуру, давайте разберемся с тем, что такое ServiceManager и зачем он нужен.

В официальной документации (http://framework.zend.com/manual/2.2/en/mo. ager.intro.html) сказано, что ServiceManager — это компонент, реализующий паттерн Service Locator, предназначенный для извлечения других объектов. Другими словами, это некоторая точка входа, которая позволяет из любого места приложения получить доступ к любым объектам, зарегистрированным в СервисМенеджере.

Регистрируются объекты в СервисМенеджере либо в кофигурационном файле module.config.php в секции service_manager, либо в Module.php в методе getServiceConfig(), выглядит это примерно так (пример скопирован из документации):

array(
‘aliases’ => array(
// Здесь можно задать алиасы для зарегистрированных сервисов или для других алиасов
‘SomeModuleModelUser’ => ‘User’,
),
‘factories’ => array(
// Ключ — имя сервиса,
// Значение — либо имя класса, реализующего интерфейс FactoryInterface,
// либо экземпляр класса, реализующего FactoryInterface,
// либо любой PHP коллбэк
‘User’ => ‘SomeModuleServiceUserFactory’,
‘UserForm’ => function ($serviceManager) <
$form = new SomeModuleFormUser();

// Retrieve a dependency from the service manager and inject it!
$form->setInputFilter($serviceManager->get(‘UserInputFilter’));
return $form;
>,
),
‘invokables’ => array(
// Ключ — имя сервиса,
// значение — имя класса, экземляр которого должен быть создан.
‘UserInputFiler’ => ‘SomeModuleInputFilterUser’,
),
‘services’ => array(
// Ключ — имя сервиса,
// значение — объект.
‘Auth’ => new SomeModuleAuthenticationAuthenticationService(),
),
),
);

Имея приведенную выше конфигурацию СервисМенеджера в любом нашем контроллере теперь мы можем вызвать код вида:

и объект $user_form будет содержать соответствующую форму.

Теперь настало время вернуться к модулю Application, входящему в ZendSkeletonApplication.

Дерево каталогов этого модуля выглядит так:

config/
module.config.php
language/

src/
Application/
Controller/
IndexController.php
view/
application/
index/
index.phtml
error/
404.phtml
index.phtml
layout/
layout.phtml
Module.php

Начнем с Module.php. Этот файл объявляет класс Module с 3 методами:

Код метода onBootstrap() в этом модуле отвечает за обслуживание маршрутов типа Segment (о типах маршрутов чуть ниже).

Метод getAutoloaderConfig() сообщает ядру фреймворка где искать исходные коды модуля:

public function getAutoloaderConfig()
<
return array(
‘ZendLoaderStandardAutoloader’ => array(
‘namespaces’ => array(
__NAMESPACE__ => __DIR__ . ‘/src/’ . __NAMESPACE__,
),
),
);
>

В текущем случае это директория modules/Application/src/Application.

В методе getConfig() возвращается путь к файлу настроек модуля:

return include __DIR__ . ‘/config/module.config.php’;

Этим файлом возвращается массив с настройками, содержащий следующие данные:

  • элемент массива router — это массив содержащий список маршрутов, обслуживаемых модулем и список контроллеров, для каждого из маршрутов,
  • view_manager содержит пути к шаблонам, которые будут использоваться приложением и ряд дополнительных настроек шаблонизатора,
  • service_manager — список объектов, которые должны быть инициализированы СервисМенеджером,
  • ряд других настроек.

Как и в других MVC-фреймворках в Zend Framework используются понятия: маршрут (route), контроллер и действие (action). Маршрут определяет адрес страницы, контроллер и экшен — действия, которые будут выполнены для отображения страницы. Каждый контроллер — это класс, а действия — это методы с именем вида nameAction() в нём. Как следствие, каждый контроллер может содержать несколько действий, например, контроллер BlogPostController(), который мы создадим далее, будет содержать действия addAction(), editAction(), deleteAction(), viewAction() и indexAction().

В настройках модуля Application определяется два маршрута:

return array(
‘router’ => array(
‘routes’ => array(
‘home’ => array(
‘type’ => ‘ZendMvcRouterHttpLiteral’,
‘options’ => array(
‘route’ => ‘/’,
‘defaults’ => array(
‘controller’ => ‘ApplicationControllerIndex’,
‘action’ => ‘index’,
),
),
),
‘application’ => array(
‘type’ => ‘Literal’,
‘options’ => array(
‘route’ => ‘/application’,
‘defaults’ => array(
‘__NAMESPACE__’ => ‘ApplicationController’,
‘controller’ => ‘Index’,
‘action’ => ‘index’,
),
),
‘may_terminate’ => true,
‘child_routes’ => array(
‘default’ => array(
‘type’ => ‘Segment’,
‘options’ => array(
‘route’ => ‘/[:controller[/:action]]’,
‘constraints’ => array(
‘controller’ => ‘[a-zA-Z][a-zA-Z0-9_-]*’,
‘action’ => ‘[a-zA-Z][a-zA-Z0-9_-]*’,
),
‘defaults’ => array(
),
),
),
),
),
),
),
);

  • За маршрут / (корень сайта, тип Literal) отвечает контроллер ApplicationControllerIndex.
  • за маршруты вида /application/[:controller[/:action]] (тип Segment) — контроллер и экшен переданные в качестве аргументов, то есть внутри модуля достаточно определить новые контроллеры и экшены и они тут же будут доступны по описанному адресу. Благодаря этому, маршрут / здесь идентичен маршруту /application/index/index.

Существует несколько типов маршрутов, их описание можно найти в документации: framework.zend.com/manual/2.2/en/modules/zend.mvc.routing.html.

Модуль Application содержит один единственный контроллер IndexController() с одним единственным экшеном indexAction(), который возвращает страничку с приветственным сообщением. Для отображения этой странички используются шаблоны, находящиеся в директории view модуля.

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

Krishna Shasankar V — Zend Framework 2.0 by Example: Beginner’s Guide [2013, PDF, EPUB, MOBI, ENG] + Code

Статистика раздачи
Размер: 46.05 МБ | Добавлен: 22 окт 2020, 10:30 | Скачали: 1
Сидеров: 2 [0 байт/сек] Личеров: [0 байт/сек]

Добавлено: 22 окт 2020, 10:30

Zend Framework 2.0 by Example: Beginner’s Guide + Code

Год: 2013
Автор: Krishna Shasankar V
Жанр: Учебное пособие
Издательство: [PACKT] Publishing
ISBN: 978-1-78216-192-9
Язык: Английский
Формат: PDF, EPUB, MOBI
Качество: Изначально компьютерное (eBook)
Интерактивное оглавление: Да
Количество страниц: 228

Описание:Master application development with Zend Framework 2.0
Learn about Zend Framework components and use them for functions such as searching, image processing, and payment gateway integrations
Integrate third-party services for media sharing and payment processing

Цукерберг рекомендует:  Информационная безопасность - Факультет информационной безопасности
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих