Из Википедии, бесплатной энциклопедии
  (Перенаправлено из Zend Framework )
Перейти к навигации Перейти к поиску

Laminas Project (ранее Zend Framework или ZF ) - это объектно-ориентированная среда веб-приложений с открытым исходным кодом , реализованная на PHP 7 и лицензированная по новой лицензии BSD . [3] Фреймворк в основном представляет собой набор профессиональных пакетов на основе PHP [4] . [5] Фреймворк использует различные пакеты, используя Composer как часть своих менеджеров зависимостей пакетов; некоторые из них - PHPUnit для тестирования всех пакетов, Travis CI для непрерывных служб интеграции. Laminas предоставляет пользователям поддержку модели – представления – контроллера. (MVC) в сочетании с решением Front Controller. [6] Реализация MVC в Laminas имеет пять основных областей. Функции маршрутизатора и диспетчера определяют, какой контроллер запускать на основе данных из URL-адреса , а функции контроллера в сочетании с моделью и представлением разрабатывают и создают конечную веб-страницу. [5]

17 апреля 2019 года было объявлено [7], что фреймворк переходит в проект с открытым исходным кодом, поддерживаемый Linux Foundation и известный как Laminas.

Лицензия [ править ]

Laminas находится под лицензией New BSD, одобренной Open Source Initiative (OSI) . Для ZFv1 все кодовые авторы должны подписать соглашение Contributor License (CLA) на основе фонда Apache Software «s CLA . По словам Энди Гутманса из Zend, политика лицензирования и внесения взносов была создана для предотвращения проблем с интеллектуальной собственностью для коммерческих пользователей ZF. [8] ZF2 и более поздние версии не содержат CLA. [9] Для структуры также доступна долгосрочная поддержка (долгосрочная поддержка или LTS) в течение 3 лет.

Компоненты и управление версиями [ править ]

Начиная с Zend Framework версии 2.5, компоненты разделяются на пакеты с независимыми версиями, а zendframework / zendframework конвертируется в метапакет Composer. Компоненты фреймворка, представленные после разделения, не добавляются в метапакет.

В то время как версия выпуска метапакета zendframework / zendframework остается на уровне 3.0.0, он проинструктирует Composer установить последние совместимые версии компонентов фреймворка в соответствии с семантическим управлением версиями. Таким образом, компонент zend-mvc будет установлен в его текущей версии 3.1.1, zend-servicemanager в версии 3.3.0 и zend-form в версии 2.10.2.

Laminas состоит из следующих компонентов: [10]

Установка [ править ]

Официально поддерживаемый метод установки - через менеджер пакетов Composer .

Laminas предоставляет мета-пакет, который включает 61 компонент, но рекомендуемый способ - установить необходимые компоненты каркаса по отдельности. Composer разрешит и установит все дополнительные зависимости.

Например, если вам нужен пакет MVC, вы можете установить его с помощью следующей команды:

$ composer требует zendframework / zend-mvc

Полный список компонентов доступен в документации Zend Framework. [10]

Анатомия каркаса [ править ]

Laminas следует подходу конфигурации, а не соглашению и не требует какой-либо конкретной структуры приложения. Доступны каркасные приложения для zend-mvc и zend-expressive, которые предоставляют все необходимое для запуска приложений и служат хорошей отправной точкой.

Рекомендуемая структура каталогов приложения MVC [ править ]

ZendSkeletonApplication, приложение-скелет, использующее системы слоев и модулей Laminas MVC, можно установить с помощью:

$ composer create-project zendframework / скелет-приложение <путь-проекта>

Он создаст подобную файловую структуру:

<название проекта> /├── config /│ ├── автозагрузка /│ │ ├── global.php│ │ └── local.php.dist│ ├── application.config.php│ └── modules.config.php├── данные /│ └── кеш /├── модуль /├── общедоступный /│ └── index.php├── продавец /├── composer.json├── composer.lock└── phpunit.xml.dist

Каталог config / имеет конфигурации для всего приложения. Каталог module / содержит локальные модули, которые фиксируются вместе с application. vendor / содержит код поставщика и другие модули, управляемые независимо от приложения, содержимое папки обычно управляется Composer.

У модуля Laminas есть только одно требование: класс модуля существует в пространстве имен модуля и может быть загружен автоматически. Класс модуля предоставляет приложению логику настройки и инициализации. Рекомендуемая структура модуля следующая:

<имя модуля>├── config /│ └── module.config.php├── src /│ └── Module.php├── тест /├── просмотр /├── composer.json└── phpunit.xml.dist

Каталог config / содержит конфигурации модулей, каталог src / содержит исходный код модуля, как определено в стандарте автозагрузки PSR-4 , каталог test / содержит модульные тесты для модуля, а каталог view / содержит сценарии просмотра.

Создание структуры проекта [ править ]

Laminas поддерживает ввод из командной строки для создания структуры каталогов. Мы будем использовать интерфейс командной строки, чтобы начать создание структуры каталогов для нашего проекта. Это даст вам полное представление о структуре каталогов. Интерфейс поддерживает и предоставляет интерфейс Zend_Tool, предоставляющий целый ряд командных функций.

  1. Откройте интерфейс командной строки и измените каталог hellozend.
  2. Пользователи Windows вводят: bin \ zf \ bat создать проект
  3. Пользователи Linux / Mac вводят: bin \ zf.sh создать проект

Эта процедура создаст проект Laminas в указанном вами месте. После запуска Zend_Toll будет создан базовый каркас приложения. [11] Это создаст не только структуру каталогов, но и все основные элементы инфраструктуры MVC . [11] Чтобы получить функциональные возможности Apache, настройки виртуального хоста будут такими: [11]

Слушайте  8080 <VirtualHost  *: 8080 > DocumentRoot  / User / keithpope / Sites / hellozend / public </VirtualHost>

Созданная базовая структура каталогов будет примерно такой, как упоминалось в вышеупомянутой структуре каталогов Zend Framework, с аналогичным объяснением. Еще один аспект Zend-Tool, который автоматически инициализируется во время установки, - это начальная загрузка. Здесь основная цель - инициализировать запрос страницы разработчиком. Основная запись здесь, созданная Zend Framework, - это индексный файл. Индексный файл предоставляет функцию для обработки запроса пользователя. Это основная точка входа для всех запросов. Ниже показаны функциональные возможности. [11]

  1. Application-path: определяет путь к каталогу приложения.
  2. Application_Env: изменяет поведение приложения в зависимости от различных факторов, таких как способ использования приложения.
  3. getenv (): проверяет системное окружение.
  4. Инициализировать приложение Zend-Application: включить Zend-Application и создать его экземпляр.
  5. Вызов метода bootstrap () вместе с методом run (), запускающий MVC .

В общем, Zend-Tool создает много важных структур каталогов. Эта система построена на технологии быстрой разработки приложений . Как общее правило поддержки, фреймворк фокусируется на кодировании и структурах проекта, а не на более мелких частях. [12]

  • Структура каталога проекта
  • Контроллеры
  • Действия
  • Взгляды
  • Файл начальной загрузки

Контроллеры [ править ]

Контроллер - это основной вход в приложение Laminas. [13] Обработчик фронт-контроллера является главным центром для приема запросов и выполнения точных действий в соответствии с запросами команд. Весь процесс запроса и реагирования - это маршрутизация и диспетчеризация (что в основном означает вызов правильных методов в классе), которые определяют функциональность кода. [13] Это реализуется через интерфейс Zend_Controller_Router_-. [13] Функция маршрутизатора заключается в том, чтобы определить, какие действия необходимо выполнить, а диспетчер, наоборот, выполняет эти запрошенные действия. [13] Контроллер в Laminas подключен к разнообразному массиву структурных каталогов, что обеспечивает поддержку эффективной маршрутизации. [13]Основной точкой входа и командным контроллером является Zend_Controller_Front, он работает как основа, которая делегирует полученную и отправленную работу. Запрос формируется и инкапсулируется с экземпляром Zend Controller Request HTTP в качестве поставщика доступа к HTTP- запросам. [13] HTTP - держать все суперглобальные фреймворка ($ _GET, $ _POST, $ _COOKIE, $ _SERVER и $ _ENV) с их соответствующими путями. Более того, контроллер также предоставляет функции getParam (), которые позволяют собирать запрошенные переменные.

Действия [ редактировать ]

Действия - важные функции. Контроллеры не работают без действий. Для этого мы создаем другой метод, к имени которого добавлено действие, и фронт-контроллер автоматически распознает его как действие. [11] Действие имеет метод init (), который показывает его частный характер и недоступен никому. [11] Следующие команды выполняются, чтобы Zend_Tool мог создать действие за нас. [11] Благодаря использованию стандартного диспетчера все функции называются по имени действия и к ним добавляется слово «Действие». [13] Это приводит к классу действий контроллера, содержащему такие методы, как indexAction (), viewAction (), editAction () и deleteAction ().

Пользователи Windows:

bin \ zf.bat создать действия с индексом

Пользователи Linux и Mac :

bin / zf.sh создать действие по индексу

Пример форм и действий: [14]

пространство имен  Альбом \ Форма ;используйте  Zend \ Form \ Form ;class  AlbumForm  extends  Form {  public  function  __construct ( $ name  =  null )  {  // мы хотим игнорировать переданное имя  parent :: __construct ( 'album' ); $ this -> add ( array (  'name'  =>  'id' ,  'type'  =>  'Скрытый' ,  ));  $ this -> add ( array (  'name'  =>  'title' ,  'type'  =>  'Text' ,  'options'  =>  array (  'label'  =>  'Title' ,  ),  ));  $ это -> добавить ( массив (  'имя'  =>  'художник ' ,  ' type '  => 'Text' ,  'options'  =>  array (  'label'  =>  'Artist' ,  ),  ));  $ это -> добавить ( array (  'name'  =>  'submit' ,  'type'  =>  'Submit' ,  'attributes'  =>  array (  'value'  =>  'Go' ,  'id'  =>  'submitbutton' ,  ),  ));  }  // источник: Руководство по Zend Framework }

Стандартный роутер [ править ]

Стандартный маршрутизатор - важный инструмент переднего контроллера. Здесь принимаются основные решения в том, какой модуль, контроллер и действие запрашиваются. [11] Все они здесь обрабатываются. Ниже приводится структура по умолчанию.

  1. Модуль
  2. Контроллер
  3. Действия

Запрос следует шаблону, первая информация берется из конечной точки URL HTTP . URI - это конечная точка запроса. Структура URL выглядит следующим образом: [11] http://domain.com/moduleName/controllerName/actionName

Пример кода маршрутизатора по умолчанию: [15]

// Предполагая следующее: $ ctrl -> setControllerDirectory (  array (  'default'  =>  '/ path / to / default / controllers' ,  'news'  =>  '/ path / to / news / controllers' ,  'blog'  = >  '/ путь / к / блогу / контроллерам'  ) );

 
Только модуль:
http: // example / news
    module == news
 
Недействительный модуль соответствует имени контроллера:
http: // example / foo
    controller == foo
 
Модуль + контроллер:
http: // example / blog / archive
    module == blog
    controller == Архивный
 
модуль + контроллер + действие:
http: // example / blog / archive / list
    module == blog
    controller == archive
    action == list
 
Module + controller + action + params:
http: // example / blog / archive / list / sort / alpha / date / desc
    module == blog
    controller == archive
    action == list
    sort == alpha
    date == desc

Служебные методы [ править ]

Проект Laminas также предоставляет некоторые вспомогательные методы. Ниже приведены некоторые служебные методы, представленные в платформе. [11]

_вперед()
он используется для призыва к действию
_forward{$action, $controller = null, $module = null, array $params = null}
$ действия
строка, требуется действие
$ контроллер
необязательный строковый параметр и это место, где находится контроллер.
$ модуль
строка, имеет модуль, в котором у нас есть контроллер.
$ params
массив, пользовательский параметр

Другой метод - это служебный метод перенаправления. Это противоположно вышеупомянутому методу _forward (). [11] _redirect () выполняет HTTP- перенаправление при создании нового запроса. [11] Методы _redirect () принимают два аргумента, а именно $ url и $ options.

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

//application/controllers/IndexController.php общедоступная  функция  init () {  $ this -> _helper -> viewRenderer -> setNoRender (); }

На этапе инициализации IndexController и ContactController вызывается viewReader и для объекта представления вызывается флаг noRender. [11] Отсутствие этого процесса создает ошибку в нашем приложении.

Просмотр каталогов [ править ]

Laminas обеспечивает структуру представления для нашего проекта и контроллера, а действия автоматически предоставляются нашему приложению. Внутри папки Laminas in view мы наблюдаем следующие папки. [11]

  1. Вид
  2. Помощники
  3. Скрипты
  4. Контакты
  5. ошибки
  6. индекс

Чтобы создать представление, мы следуем: [11]

<! - application / views / scripts / index / index.phtml -> < html > < head > < title > < Hello  Zend </ title > </ head > < body > < hi > Hello Zend </ hi > < p > Привет от Zend Framework </ p > </ body > </ html >

Посмотреть образец: [16]

// https://framework.zend.com/manual/2.4/en/modules/zend.view.quick-start.html пространство имен  Foo \ Controller ;используйте  Zend \ Mvc \ Controller \ AbstractActionController ; используйте  Zend \ View \ Model \ ViewModel ;класс  BazBatController  расширяет  AbstractActionController {  общедоступная  функция  doSomethingCrazyAction ()  {  $ view  =  new  ViewModel ( array (  'message'  =>  'Hello world' ,  ));  $ view -> setTemplate ( 'foo / baz-bat / do-something-crazy' );  return  $ view ;  } }

[ править ]

Zend Technologies , соучредителями которой являются основные участники PHP Энди Гутманс и Зеев Сураски , была первоначальным корпоративным спонсором Zend Framework. [17] Технологическими партнерами являются IBM , [18] Google , [19] Microsoft , [20] Adobe Systems , [21] и StrikeIron . [22]

Особенности [ править ]

Характеристики ламин включают: [23]

  • Все компоненты PHP 5 полностью объектно-ориентированы и совместимы с E_STRICT, что помогает в разработке тестов и написании кодов без ошибок и без сбоев. [24]
  • Архитектура использования по желанию со слабосвязанными компонентами и минимальными взаимозависимостями
  • Расширяемая реализация MVC с поддержкой макетов и шаблонов на основе PHP по умолчанию
  • Поддержка нескольких систем баз данных и поставщиков, включая MariaDB , MySQL , Oracle , IBM DB2 , Microsoft SQL Server , PostgreSQL , SQLite и Informix Dynamic Server
  • Составление и доставка писем, получение через mbox , Maildir , POP3 и IMAP4
  • Гибкая подсистема кэширования с поддержкой многих типов серверных программ, таких как память или файловая система .
  • С помощью служб удаленного вызова процедур (RPC) и REST ( передача репрезентативного состояния ) Zend Apigility помогает разработчикам создавать API, аутентификацию API , документацию API, простую модификацию [25]

Разработка приложений [ править ]

Приложения Laminas могут работать на любом стеке PHP, который соответствует техническим требованиям. Zend Technologies предоставляет стек PHP, Zend Server (или Zend Server Community Edition), который рекламируется как оптимизированный для запуска приложений Laminas. Zend Server включает Zend Framework в свои установщики вместе с PHP и всеми необходимыми расширениями. Согласно Zend Technologies, Zend Server обеспечивает повышенную производительность для приложений PHP и особенно Zend Framework за счет ускорения кода операции и нескольких возможностей кэширования, а также включает средства мониторинга и диагностики приложений. [26] Zend Studio- это IDE, которая включает функции, специально предназначенные для интеграции с Zend Framework. Он предоставляет представление MVC, генерацию кода MVC на основе Zend_Tool (компонент Zend Framework), средство форматирования кода, автозавершение кода, поддержку параметров и многое другое. [27] Zend Studio не является бесплатным программным обеспечением, тогда как Zend Framework и Zend Server Community Edition бесплатны. Zend Server совместим с распространенными инструментами отладки, такими как Xdebug . Другие разработчики могут захотеть использовать другой стек PHP и другую IDE, такую ​​как Eclipse PDT, которая хорошо работает вместе с Zend Server. Предварительно настроенная бесплатная версия Eclipse PDT с Zend Debug доступна на веб-сайте Zend.

Код, документация и стандарты тестирования [ править ]

Код, добавляемый в Laminas, регулируется строгими стандартами кода, документации и тестирования. Весь код должен соответствовать стандартам кодирования проекта, а модульные тесты должны достичь 80% покрытия кода, прежде чем соответствующий код может быть перемещен в ветвь выпуска. [28]

Простой облачный API [ править ]

22 сентября 2009 г. Zend Technologies объявила [29], что будет работать с технологическими партнерами, включая Microsoft , IBM , Rackspace , Nirvanix и GoGrid, а также с сообществом Zend Framework, чтобы разработать общий API для служб облачных приложений под названием Simple Cloud. API . Этот проект является частью Zend Framework и будет размещен на веб-сайте Zend Framework [30], но на отдельном сайте под названием simplecloud.org [31]был запущен для обсуждения и загрузки самых последних версий API. Simple Cloud API и несколько облачных сервисов включены в Zend Framework. Адаптеры к популярным облачным сервисам достигли производственного качества.

Hello World: файл за файлом [ править ]

Чтобы создать программу Hello World, нужно выполнить несколько шагов, в том числе:

  • Сначала создайте четыре файла в структуре каталогов. Это файл начальной загрузки, файл управления Apache ( .htaccess ), файл контроллера и контроллер представления для представления. [13]
  • Во-вторых, необходимо разработать копию Zend Framework. С ростом сложности требуется дополнительный код, который обеспечит функциональность, относительно небольшой и фокусируется на преимуществах системы MVC . [13] Что касается процесса более подробно, файл начальной загрузки - это инициализация в той или иной форме.

Затем необходимо убедиться, что среда правильная и нет ошибок, а затем установить дату и время для функции отслеживания. [13] Чтобы установить дату и время, можно выполнить множество процедур; например, может быть вызван метод data_default_timezone_set (), и Zend предполагает, что каталог по умолчанию будет включать путь phd. [13] Zend Framework не зависит от какого-либо конкретного файла, но в этом случае полезны вспомогательные классы. Вот несколько примеров:

  • Zend_Loader :: loadClass () основная цель здесь - исправить файл для предоставленного имени класса.
  • После этого символы подчеркивания преобразуются в структуры, специфичные для каталога. [13] В результате код строки Zend_Loader :: loadClass ('Zend_Controller_Front'); и include_once 'Zend / Controller / Front.php'; показать похожие результаты.
  • Zend_Debug :: dump () выполняет функции с точки зрения отладочной информации и ориентирован на форматированный вывод var_dump (). [13] Наконец, программа начальной загрузки запускает передний контроллер и инициализирует его. Шаблон проектирования, используемый Zend_Controller_Front, является дизайном Singleton, а getInstance () используется для получения единственного экземпляра. [13]

Текущая разработка [ править ]

Zend Framework 3.0 был выпущен 28 июня 2016 года. Он включает новые компоненты, такие как сервер JSON RPC, преобразователь XML в JSON, функциональность PSR-7 и совместимость с PHP 7. Zend Framework 3.0 работает до 4 раз быстрее, чем Zend Framework 2, и пакеты были разъединены, чтобы обеспечить большее повторное использование. [32] Разработчики Zend Framework активно поощряют использование Zend Framework версии 3.x. Заявленный срок службы Zend Framework 1 - 28 сентября 2016 г., а для Zend Framework 2 - 31 марта 2018 г. Первый разрабатываемый выпуск Zend Framework 2.0 был выпущен 6 августа 2010 года. [33] Изменения, внесенные в этот выпуск, включали удаление операторов require_once , переход на пространства имен PHP 5.3, отремонтированный набор тестов, переписанныйZend \ Session и добавление нового Zend \ Stdlib . Второй разрабатываемый выпуск состоялся 3 ноября 2010 г. [34] Первый стабильный выпуск Zend Framework 2.0 был выпущен 5 сентября 2012 г. [35]

См. Также [ править ]

  • Инструменты API Laminas
  • Сравнение веб-фреймворков
  • Новая лицензия BSD
  • Zend Сервер
  • Zend Studio

Ссылки [ править ]

  1. ^ «Архивы» . Zend Framework . Проверено 1 мая 2013 года .
  2. ^ "zendframework / zendframework" . GitHub . Проверено 17 мая 2017 года .
  3. ^ «Введение в Zend Framework» . Справочное руководство программиста ZF . Проверено 12 февраля 2009 .
  4. ^ «Учебник по PHP 5» . www.w3schools.com . Проверено 20 февраля 2017 .
  5. ^ a b Компания Zend, Rogue Wave. «Zend Framework - О программе» . framework.zend.com . Проверено 5 февраля 2017 .
  6. ^ Supaartagorn, C. (2011). PHP Framework для управления базами данных на основе шаблона MVC. Международный журнал компьютерных наук и информационных технологий (IJCSIT) , 3 (2), 251-258.
  7. ^ «От Зенда к ламинам» . 17 апреля 2019.
  8. ^ Гутманс, Andi (2005-10-27). «Zend Framework (сообщение слишком длинное, поэтому не забудьте выпить кофе)» . Энди в Интернете и информационных технологиях . Проверено 11 февраля 2009 .
  9. ^ "Руководство для авторов (ZF v1)" .
  10. ^ a b «Документация по компонентам ZF» .
  11. ^ Б с д е е г ч я J к л м п о р Поуп, Кит. Zend Framework 1.8 Разработка веб-приложений (1). Олтон, Великобритания: Packt Publishing, 2009. Электронная библиотека ProQuest. Интернет. 13 февраля 2017.
  12. Перейти ↑ Padilla, A. (2009). Начало Zend Framework . Апресс.
  13. ^ Б с д е е г ч я J к л м н Аллен, Р., Л, Н., & Браун, С. (2009). Zend framework в действии . Укомплектование персоналом.
  14. Компания, Zend, Rogue Wave. «Zend Framework - Проблема» . framework.zend.com . Проверено 14 февраля 2017 .
  15. Компания, Zend, Rogue Wave. «Zend Framework - Проблема» . framework.zend.com . Проверено 14 февраля 2017 .
  16. Компания, Zend, Rogue Wave. «Zend Framework - Проблема» . framework.zend.com . Проверено 14 февраля 2017 .
  17. ^ «История PHP и связанных проектов» . Группа PHP . Проверено 11 февраля 2009 .
  18. ^ LaMonica, Martin (2005-02-25). «IBM поддерживает программное обеспечение с открытым исходным кодом для Интернета» . cnet.com . Проверено 11 февраля 2009 .
  19. ^ Ядро, Шон Майкл (2006-12-20). «Google Data присоединяется к PHP Zend Framework» . internetnews.com . Проверено 11 февраля 2009 .
  20. ^ Крилл, Пол (2006-10-31). «Microsoft, Zend ускоряют PHP для Windows» . infoworld.com . Проверено 11 февраля 2009 .
  21. ^ Поттер, Майк (2014-05-21). «Вклад Adobe в поддержку Zend Framework AMF» . Официальный блог команды Flex . Архивировано из оригинала на 2009-02-07 . Проверено 11 февраля 2009 .
  22. ^ «Избранные партнеры StrikeIron» . Проверено 11 февраля 2009 .
  23. ^ «О Zend Framework» . Проверено 11 февраля 2009 .
  24. ^ Зачем использовать Zend Framework? Автор: SuntecOSS, дата обращения 21 апреля 2016 г.
  25. ^ Apigility Zend, конструктор API с открытым исходным кодом для разработки качественных API, автор SuntecOSS, дата обращения 19 мая 2016 г.
  26. ^ "Зенд сайт" . Zend.com . Проверено 17 мая 2017 года .
  27. ^ «Загрузить Zend Studio - IDE, профилировщик PHP, мобильные устройства, модульное тестирование и многое другое» . www.Zend.com . Проверено 17 мая 2017 года .
  28. ^ «Руководство разработчика Zend Framework» . 1 июля 2006 . Проверено 14 июля 2008 года .
  29. ^ "Пресс-релиз Simple Cloud API" . Архивировано из оригинала на 1 декабря 2009 года . Проверено 5 ноября 2009 .
  30. ^ "Сайт Zend Framework" . Проверено 5 ноября 2009 .
  31. ^ simplecloud.org
  32. ^ zendframework (28.06.2016). "Zend Framework 3 выпущен!" . Проверено 12 октября 2016 .
  33. ^ «Zend Framework 2.0.0dev1» . 2010-08-06 . Проверено 4 сентября 2010 .
  34. ^ «Zend Framework 2.0.0dev2» . 2011-11-03 . Проверено 18 марта 2011 .
  35. ^ «Выпущен Zend Framework 2.0.0 STABLE! - Zend Framework - Zend Framework» . Framework.zend.com. 5 сентября 2012 . Проверено 14 июня 2013 года .

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • Zend Framework