ZendFramework

ZendFramework Day 12 ноября 2011

Posted in Events, ZendFramework on October 13th, 2011 by Yaroslav Vorozhko – Be the first to comment

Zend Framework Day12 ноября, в Киеве, пройдет конференция “Zend Framework Day” – посвященная популярному PHP фреймворку Zend Framework. Среди докладчиков непосредственные разработчики компонент Zend Framework. Событие соберет лучших PHP и Zend Framework специалистов из Украины, России, Белоруссии и других стран СНГ.

С текущим списком тем и докладчиков можно ознакомиться на странице.

Событие будет интересно не только тем, кто использует Zend Framework, но и всем веб-разработчикам и PHP программистам в частности.

Место проведения — отель “Казацкий”, г. Киев, ул. Михайловская 1/3 (Площадь Независимости).

Со стоимостю участия и другой необходимой информацией вы можете ознакомиться на странице.

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

Сайт конференции – http://frameworksdays.com/event/zend-framework-day-2011
Наши новости в twitter – http://twitter.com/fwdays
Наша страница в facebook – http://facebook.com/fwdays

27го ноября, Киев. Совместная конференция ZFConf Ukraine & MageConf

Posted in Events, ZendFramework on November 9th, 2010 by Yaroslav Vorozhko – Be the first to comment

27го ноября в Киеве пройдет бесплатная, международная совместная конференция ZFConf Ukraine & MageConf.

Конференция пройдет 27 ноября, в Киеве
Титульный спонсор конференции – компания Magento
Место: КиевЭкспоПлаза, ул. Салютная 2б, 3 павильон
Время: 27 ноября 2010 г. (с 11:00 до 19:00)
Длительность: 1 полный день
Формат: доклады в три потока и обсуждения на флипчарте (в перерывах)
Язык докладов: русский
Стоимость участия: бесплатно
Потоки: Zend Framework, PHP, Magento.

Доклады и Докладчики:

1. Встречайте Zend Framework 2.0
Александр Веремьев / Zend Framework Core команда (Zend Technologies)

2. Эволюция ZF: архитектура, шаблоны, рефакторинг
Виктор Фараздаги / Component Maintainer и Contributor ZF 2.0 (4C)

3. Юнит тестирование в Zend Framework 2.0
Ростислав Михайлив / Chief Developer / Software Architect (Gadu-Gadu)

4. Хранение, обработка и отдача статики с использованием \Zend \File. Опыт социальной сети starlook.ru
Кирилл Мокевнин / Senior developer (undev)

5. Чуть сложнее чем Singleton: аннотации, IOC, АОП
Кирилл Чебунин / Senior PHP Developer (Альпари)

6. Doctrine 2
Валерий Рабиевский / Team leader (stfalcon.com)

Список еще будет обновляться, вы также можете подать заявку на доклад, если вам есть чем поделиться поделиться с общественностью.
Также были бы рады услышать ваши комментарии по текущим темам.

Следите за обновлениями на http://zfconf.org.ua

Как создавать Providers для Zend_Tool

Posted in ZendFramework on July 3rd, 2010 by Yaroslav Vorozhko – Be the first to comment

Matthew Weier O’Phinney ведущий разработчик Zend Framework опубликовал новую статью про то, как создавать Providers для Zend_Tool.
В общем провайдеры (providers) Zend Tool отвечают за команды выполняемые через командную строку, CLI – приложений. Например таких как крон скрипты, миграционные скрипты и т.п.
Советую прочитать статью Matthew о провайдерах, чтоб ближе узнать о том, что представлят собой командная строка Zend Tool.

Создание простого доступа к ресурсам из ZF контроллера

Posted in PHP, Tips And Tricks, ZendFramework on March 22nd, 2010 by Yaroslav Vorozhko – 2 Comments

Было бы очень хорошо иметь возможность доступа к загружаемым в bootstrap ресурсам из контроллеров приложения. Например, я хотел бы получить доступ к "DB" ресурсу из контроллера следующим образом $this->db;
Для этого напишем Action Helper, который будет загружать определенные ресурсы в контроллер приложения:

CODE:
  1. class My_ResourceInjector extends Zend_Controller_Action_Helper_Abstract
  2. {
  3.     protected $_resources;
  4.  
  5.     public function __construct(array $resources = array())
  6.     {
  7.         $this->_resources = $resources;
  8.     }
  9.  
  10.     public function preDispatch()
  11.     {
  12.         $bootstrap  = $this->getBootstrap();
  13.         $controller = $this->getActionController();
  14.         foreach ($this->_resources as $name) {
  15.             if ($bootstrap->hasResource($name)) {
  16.                 $controller->$name = $bootstrap->getResource($name);
  17.             }
  18.         }
  19.     }
  20.  
  21.     public function getBootstrap()
  22.     {
  23.         return $this->getFrontController()->getParam('bootstrap');
  24.     }
  25. }

и инициализируем его в bootstrap:

CODE:
  1. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  2. {
  3.     protected function _initResourceInjector()
  4.     {
  5.         Zend_Controller_Action_HelperBroker::addHelper(
  6.             new My_ResourceInjector(array(
  7.                 'db',
  8.                 'layout',
  9.                 'navigation',
  10.             ));
  11.         );
  12.     }
  13. }

Код выше, создаст ссылки на ресурсы: db, layout и navigation. Это значит, что теперь вы можете получить к ним прямой доступ из контроллеров.

CODE:
  1. class FooController extends Zend_Controller_Action
  2. {
  3.     public function barAction()
  4.     {
  5.         $this->layout->disableLayout();
  6.         $model = $this->getModel();
  7.         $model->setDbAdapter($this->db);
  8.         $this->view->assign(
  9.             'model'      => $this->model,
  10.             'navigation' => $this->navigation,
  11.         );
  12.     }
  13.  
  14.     // ...
  15. }

Этото решение ведет к некоторому упрощению - теперь нет необходимости вытягивать bootstrap из объекта инициализации, а потом вытягивать ресурс.
Но, у этого решения есть несколько проблем: Откуда мы знаем, какие ресурсы были связаны с контроллером? Как мы можем это контролировать?
Отсюда, вытекает решение создать пул необходимых ресурсов для контроллера.
read more »

Настраиваем PHPUnit тесты в Zend Framework 1.10

Posted in Development, PHP, Testing, ZendFramework on February 9th, 2010 by Yaroslav Vorozhko – 4 Comments

В документации к Zend Framework есть описание как создавать PHPUnit тесты для контроллеров и для баз данных. Но, к сожалению они не объясняют как настроить приложения для выполнения Unit тестов.
В данной статье приведены шаги по настройке Unit тестов:
1. Установка phpunit
2. Установка xdebug
3. Настройка phpunit.xml
4. Создание TestHelper.php для инициализации приложения
5. Написание и выполнение простого теста

В первую очередь для выполнения тестов нам понадобится phpunit, который можео установить из PEAR пакета PHPUnit.

CODE:
  1. $ pear channel-discover pear.phpunit.de
  2. $ pear config-set preferred_state alpha
  3. $ pear install phpunit/PHPUnit
  4. or you may wish to install all the optional supporting packages:
  5. $ nano /usr/local/php5/etc/php.ini  // memory_limit = 32M; change this to at least 32M
  6. // if you get a permission denied error on the ZF community server, send an email to fw-servers mail list
  7. $ pear install --alldeps  phpunit/PHPUnit

Следующим шагом установим xdebug. Xdebug мы будем использовать для проверки покрытие кода тестами.

CODE:
  1. $ pecl install xdebug-beta

Теперь откройте ваш php.ini файл и пропишите загрузку xdebug.

CODE:
  1. zend_extension=/usr/lib/..../..../php5/20060613/xdebug.so

read more »

Как вы используете Sphinx Search API?

Posted in Development, LinkAider, Projects, Sphinx Search, ZendFramework on December 21st, 2009 by Yaroslav Vorozhko – Be the first to comment

Sphinx Search API для PHP пердставляет собой единый класс, который позволяет использовать все возможности Sphinx Search через его интерфейс. Но, такой класс является удобным только для небольших скриптов и задач.
Для более сложных задач и больших веб приложений необходимо другое решение. И это решения является проектированием и реализацией собственной обертки для Sphinx Search API.

В нашем проекте LinkAider.com мы используем следующие понятия и классы при работе с Sphinx Search:

  1. Сфинкс клиент, отвечающий за подключение, выполнение запросов и обработку ошибок. Для разработчика сфинкс клиент невидим, мы только сообщаем ему параметры подключения к searchd.
  2. Сфинкс индекс - это один из основных классов, с которым работает разработчик, этот класс отвечает за формирование запросов и выполнение запросов через Сфинкс клиент, а также за обработку результатов запроса.
  3. Сфинкс запрос - это еще один класс к которому обращается разработчик для составления запросов. Каждый запрос отвечает за свои индекс к которому обращается, а также содержит свои фильтры, группировки, сортировки и собственно сам запрос.
  4. Сфинкс результат - это класс, который разбирает ответ сфинкса и предоставляет удобный интерфейс к информации по каждому запросу, также он содержит информацию об ошибках, которую испльзуетя Сфинкс клиент для логирования. Сфинкс результат используется разработчиками для создания запросов к базе данных и получения искомых данных.

Пример работы выглядит следующим образом:

  1. Мы создаем объект Сфинкс индекс, который инициализирует Сфинкс клиент, устанавливая для него параметры подключения.
  2. Потом мы создаем объекты запросы для каждого указываем фильтры, группировки и т.п., и указываем к какому индексу делать запрос. Запросов может быть один или несколько, несколько запросов обрабатываються паралельно, что улучшает общую производительность системы.
  3. Каждый созданный запрос мы добавляем в Сфинкс индекс, при добавлении мы можем также указатьк какому индексу делать запрос.
  4. Специальный метод Run класса Сфинкс индекс запускает все запросы и как результат возвращает нам объект Сфинкс результат.
  5. Данные из Сфинкс результата мы используем чтоб создать запросы к базе данных и получить искомые данные.

Преимущеста, которые мы получем от работы с такой библотекой - это простота. Разработчик используя объект Сфинкс запрос может выполнять любые запросы.
Сфинкс результат предоставляет удобную обертку над массивом результата.
Нет необходимости помнить множество констант SphinxClient и парсить массив результата. В общем это выглдит так, как будто вы работаете с обычной таблицой, но не до конца. :)

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

Решение я вижу, в привязке каждого запроса к определенной таблице или группе таблиц.

По описнной выше логике я разрабатываю модуль Sphinx Search для Zend Framework, который я планирую выложить в откртый доступ очень скоро, возможно к новому году.

Поэтому хотелось бы узнать как вы используете Sphinx Search и какие преимущества и недостатки вывидите у вашего подхода.

Буду рад любым советам и рекомендациям.

Простой загрузчик файлов для Zend Framework

Posted in Development, Tips And Tricks, ZendFramework on December 17th, 2009 by Yaroslav Vorozhko – Be the first to comment

Сегодня увидел хороший code snippet простого лоадера файлов в проект на Zend Framework.

CODE:
  1. class App_Application_Resource_Fileloader extends Zend_Application_Resource_ResourceAbstract {
  2.   /**
  3.    * @return null
  4.    */
  5.  
  6. public function init() {
  7.         $options = $this->getOptions ();
  8.         foreach ($options as $filePath)
  9.             include $filePath;
  10. return null;
  11.        
  12.     }
  13.    
  14. }
  15.  
  16.  
  17. resources.fileLoader[] = LIBRARY_PATH "/App/Regex_Functions.php"
  18. resources.fileLoader[] = LIBRARY_PATH "/App/Api_Functions.php"