Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Граков Алексей Antalika.com
Этот доклад был прочитан на конференции Байнет 2.2 Beta. Минск, 11-12 сентября 2008. официальный сайт:  www.bynet2.org
Обычная разработка Cms 1 Cms 2  Super CMS  Лучшая в мире  CMS,  потому, что я написал ее сам! Зачем что-то еще?
 
Потребность в фреймворках Разработка нестандартных проектов.  Желание иметь под рукой хороший инструмент, который будет: - развиваться - иметь хорошую документацию   - иметь качественный код  - обеспечивать достаточную гибкость - содержать компоненты на все случаи жизни - бесплатным
Преимущества фреймворков Один зверь, вместо зоопарка Ускорение сроков разработки Меньше внимания на мелочи, больше на бизнес логику Больший контроль над процессом и качеством разработки Хорошая документированность Быстрый ввод новичков на проект
Php- фреймворки: codeIgniter cakePHP Symfony Zend Framework
Цитируемость фреймворков в поисковиках Поисковик CakePhp Symfony CodeIgniter Zend Framework Google (world ) 3,680,000 1,440,000 544,000 3,280,000 Google EN 3,250,000 497,000 361,000 2,040,000  Google . ru 28100 20020 28,500 36,900 Yandex 90, 000 68, 000 87, 000 333, 000
Cake PHP
CakePHP:: Возможности Совместим с  PHP4  и  PHP5 MVC Своя файловая структура Своя абстракция данных (либо  Adodb, PEAR::Db) Поддержка плагинов Валидация Scaffolding Маршрутизация запросов Компоненты  /  Хелперы  / i18n
CakePHP:: Обработка запросов
CakePHP:: Соглашения Класс  KissesAndHugsController  должен храниться в   файле  kisses_and_hugs_controller.php   Название модели записывается в ед. числе:  Book ,  MyBook , и т.п.  Названия таблиц должны быть в множественном числе, и через подчеркивание:  my _ year _ books Названия множественном числе.  BooksController ,  OxenController .
CakePHP:: Контроллеры index –  метод по умолчанию  ( site.com/books/ ) Методы контроллера    beforeFilter –  до логики beforeRender –  до  view  afterFilter  – после логики и после  view
CakePHP:: Модели Доступные методы в каждой модели: beforeFind() afterFind() beforeValidate() beforeSave() afterSave() beforeDelete() afterDelete()
CakePHP:: Шаблоны Чистый  PHP Smarty Место нахождения шаблона: /app/views/people/index. tpl
CakePHP:: Проекты Fileshifter.com Server: Pentium 3, 733mhz, 512MB RAM, 2TB SATA RAID. OS: Fedora Linux, ext3 filesystem. Объем данных на сервере:  1.37 TB. Ежедневный траффик : 28 GB  в среднем . Время отклика : 0.3-0.5  сек
Code Igniter
CodeIgniter Текущая версия 1.6.3  Гибкость Плагины  /  Хелперы Скаффолдинг Простота  (loose coupling) MVC Поддержка  PHP4 Настройка параметров автозагрузки
CI:: Ход работы приложения
CodeIgniter:: модели Классы моделей хранятся в папке  application/models/ Класс:  Model_name   Имя файла: application/models/ user_model.php Загрузка: $this->load->model(' Model_name ');   $this-> Model_name ->function();
CodeIgniter ::Контроллеры application/config/routes.php –  маршруты $route['default_controller'] = ‘ XXX_controller '; class My_class extends Controller {   ….  } _remap ()
CodeIgniter::View class Privet extends Controller  { … . } Загрузка:  $this->load->view(' name ');
Symfony
Symfony:: использует Creole  – абстракция с БД Propel  (  PDO  с 1.2) Prado  для  i18n Spyc   YAML  парсинг Pake  для командной строки (symfony 1.0) Prototype, Script.aculo.us, Dynarch.com, TinyMCE
Symfony:: возможности I18n, l10n, cache,  валидация   и т.п.  Scaffolding Генерация кода  AdminGenerator Независимые блоки ( Loose coupling) Маршрутизация Хелперы Debug
Symfony:: особенности Все классы начинаются с  ‘sf’  (стандартные) class ##MODULE_NAME##Actions extends sfActions Много различного рода конфигурационных файлов.
 
Symfony:: Известные проекты bookmarks.yahoo.com (20  млн пользователей) www.splitgames.fr   (сайт обмена играми) www.kuss.de   ( сайт знакомств) www.winkel.ro  (доска объявлений)
 
Zend Framework (ZF) Acl ( роли и ресурсы) Auth (openId, Microsoft InfoCard) Cache   / Loader  Config / Console_Getopt (cli)  Date ( i18n, l10N) / Db  Filter, Validate (34) / Gdata (Zend Google Data Client) Http_Client / Json / Locale, Log, Mail, Mime,  Registry Rest_Client / Rest_Server Service:  Akismet, Amazon, Delicious, Flickr, Nirvanix, Simpy, StrikeIron  и  Yahoo! / XmlRpc
Новое в  ZF 1.6 RC1 Интеграция с  Dojo Поддержка с  SOAP Unit -тесты для контроллеров Поддержка индексных файлов  Lucene 2.3 Zend_Session  – обработчик сохранения Paginator Zend_Config_Xml  – поддержка атрибутов Медиа хелперы ( QuickTime, Flash)
ZF  в цифрах Более 7 миллионов загрузок Более 500 разработчиков Более 1000 страниц в справочнике Более 500 примеров Более 60 проектов на SourceForge Более 30 проектов на Google Code Около 70 различных компонентов.
ZF:: соглашения Class My_Class_Name  должен находится в файле :  My/Class/Name.php C тиль кода во многом совпадает со стилями  PEAR
ZF::Front Controller Pattern
Zend_Controller_Response_Http Zend_Controller_Front  Zend_Controller_Roulter_Rewrite ( выбирает  action  для   запуска ) Zend_Controller_Dispatcher_Standard ( вызыает  action) Zend_Controller_Action ( конкретный ) Using Zend_Action_Helper  Zend_Controller_Request  Zend_View ( использует  Zend_View_Helper) Zend_Db_Table (Model ) Т.е. тут может быть  Custom   Model
ZF:: Модели Zend_Db_Table PDO $db = Zend_Db::factory($cfgDb->type, $params); Zend_Db_Table::setDefaultAapter($db); Zend_Registry::set("DB", $db);
ZF:: Контроллеры Zend_Controller_Action ErrorHandler plugin ViewRenderer action helper plugin preDispatch postDispatch Init
ZF::View interface Zend_View_Interface public function render($name); public function assign($name); Zend_View_Abstract basePath, filters, helpers, _setHelperClass (filter) Zend/Controller/Action/Helper/ViewRenderer .php MyClass_View_Smarty  extends Zend_View_Abstract
ZF:: Проекты www.magentocommerce.com  –  движок для  e-commerce, 0.5 млн скачиваний, 30 K users , 70 партнеров, 60+ языков, 150+ расширений  (no java!) RightMedia – online  реклама ( NY)  4-5 млрд показов в день, 100 K  запросов / с, 19 K  рекламодателей и партнеров (5  dev-6m) QEDWiki – IBM (mashups) PokerRoom.com – 12 млн  users (25 srv, 16front, 9mysql, i18n, docs, routes:{playpoker, pokerSpielen}: (seo), ZP+JavaBridge
Производительность Почти  Hello World test  ;-)
Обычная страница без  ORM Ыф Вид теста:   ab  – n  1000 – c  XXX 512 ram, Intel Pentium 14oo MHz ,  Windows XP  1 10 50 cakePhp 5.21 4.98 5.02 Zend 7.67 7.86 7.77 CodeIgniter 1 6 . 13 15.44 15.42
Вместе с  ORM , без кеша. Ыф 512Mb RAM 1.8Ghz AMD Sempron  под  Ubuntu Gutsy (7.10)  1 10 50 cakePhp 3.6 3.7 3.8 Zend 21.5 21.2 21.7 CodeIgniter 9.3 9.1 9.2
Ыф 512Mb RAM 1.8Ghz AMD Sempron  под  Ubuntu Gutsy (7.10)  Вместе с  ORM ,  APC  кэшем Ыф 1 10 50 cakePhp 7.3 7.3 7.3 Zend 97.5 98.0 96.6 CodeIgniter 32.8 33.3 31.8
Symfony performance
Проект  на  Zend Framework
ZF:: Пример проекта. Создаем сайт-сообщество. Несколько языков, несколько доменов, различные уровни доступа к ресурсам, маршрутизация,  ORM.
Организация разработки Zend Studio for Eclipse  (или просто  phpEclipse) Cruise Control + phpUnderControl PHPUnit ( Себастьян Бергман) Smarty SVN Ajax: xajax/jQuery/Dojo/Prototype/ и т.д. Firebug + FirePhp (FireZend) ORM (Doctrine) Memcached
Zend_Config site.ru.xml site.eu.xml site.zone.xml  <languages> <language>en</language> <language>ru</language> </languages>
bootstrap.php initView(); initRoutes(); initFrontend();
$view =  new Socnet_View_Smarty(); $vRender =  new Zend_Controller_Action_Helper_ViewRenderer($view); $vRender->setViewBasePathSpec( dirname( __FILE__).'/V/smarty/templates') ->setViewScriptPathSpec( ':module/:controller/:action.:suffix') ->setViewScriptPathNoControllerSpec( ':action.:suffix') ->setViewSuffix( 'tpl'); Zend_Controller_Action_HelperBroker::addHelper($vRender);
Auth:  $authAdapter =  new Zend_Auth_Adapter_DbTable( $db, 'user', 'login', 'pass'); Zend_Registry::set(&quot;Auth&quot;, $authAdapter); Class myAdapter extends Zend_Auth_Adapter_Interface public function authenticate();
ACL $roleAdmin  =  new  Zend_Acl_Role(Socnet_Auth_Acl::ADMIN); $this->addRole($roleAdmin, $roleMember); $this->addResource( 'forum/topic'); $this->deny( null, null);   //  Запрет всем для всего. $this->allow( null, 'forum');   //  всем доступ к форуму $this->allow( null, 'ajax');   //  всем к  ajax $this->allow( $admin, ‘admin');
Маршрутизация $route =  new Zend_Controller_Router_Route(ajax/:widgetName/:widgetAction', array( 'controller' => ‘ajax', 'action' => 'index', 'widgetName' => '', 'widgetAction' => 'index' )); $router->addRoute( 'widget_request', $route);
 
Unit- тестирование /tests  Auth  Controller    Domain  Model  Members  AllTests.php setUpEnvinronment.php
 
 
Модели /generated |- BaseModelName ParticularModel  extends BaseModelName phpDoctrine .yml  fixtures
if (extension_loaded('memcache')) { $frontendOptions =  array( 'lifetime' => 7200, // cache lifetime of 2 hours 'automatic_serialization' => true ); $backendOptions  =  array(); $frontend  =  'Core'; $backend  =  'Memcached'; }  else { $frontendOptions =  array( 'lifetime' => 7200, // cache lifetime of 2 hours 'automatic_serialization' => true ); $backendOptions  =  array( 'cache_dir' => dirname(__FILE__).'/../tmp/' //  ); $frontend  =  'Core';  $backend  =  'File'; } $cache = Zend_Cache::factory($frontend, $backend, $frontendOptions, $backendOptions); Zend_Registry::set( 'cache', $cache);
Диспетчеризация extends Zend_Controller_Dispatcher_Standard $action = $this->getActionMethod($request); $doCall = !method_exists($controller, $action); $request->setDispatched( true); $controller->preDispatch(); $xajaxargs = $controller->_page->Xajax->getRequestParams(); $sResponse = call_user_func_array( array(&$controller, $action),$xajaxargs); if (is_a($sResponse, &quot;xajaxResponse&quot;)) { $sResponse = $sResponse->getXML(); } header($sContentHeader);
motofriends.ru
Выводы:
Полезные ссылки Cakephp.org  (cake-php.ru)  –   сайт фреймворка Cakeforge.com –  набор готовых проектов на  cake codeigniter.com   (code-igniter.ru) – сайт фреймворка symfony-project.org   - сайт фреймворка Framework.zend.com  - сайт фреймворка Zendframework.ru  -  русский сайт +  wiki ( новый) http://habrahabr.ru/blogs/zend_framework/31639/  (Интеграция Zend_Acl и MVC. Часть 1) http://lobach.info/develop/zf/integrating-zend-framework-and-doctrine/  (Интеграция Zend and Doctrin e ) http://phpimpact.wordpress.com/2008/08/04/php-applications-where-is-the-include-coming-from/  ( откуда инклюды) http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html  (Prepared statements in  mysql ) http://vanav.com.ua/post397  ( Сравнение скорости PDO, ADOdb, MDB2, Zend_Db ,  и т.п.) http://club.shelek.ru/viewart.php?id=300  (Сравнительный тест систем кэширования  user data  для PHP)  http://www.dklab.ru/chicken/nablas/49.html   ( оптимизация Загрузки в 22 раза - Котеров) http :// zendframework . ru / articles / chto _ takoe _ zend _ framework /   (обзорно про  ZF) http :// kpumuk . info / php / zend - framework - router - for - subdirectory - based - site /# more -31   ( Роутеры в  Zend) http://devzone.zend.com/article/3811-Using-Zend_Tool-to-start-up-your-ZF-Project   (Zend _ Tool  – для создания рабочей копии проекта  http://www.avnetlabs.com/php/php-frameworks-revisited-codeigniter-vs-zend-framework   ( еще одно сравнение фреймворков) http://snook.ca/archives/php/codeigniter_vs_cakephp/   ( CI vs Cake) http://www.avnetlabs.com/php/php-framework-comparison-benchmarks  ( Довольно хорошие сравнительные тесты)
http://phpimpact.wordpress.com/2008/07/28/zend-framework-architecture/   ( архитектура  Zend’a) http :// wiki . ringsidenetworks . org / display / ringside / Layering + and + Caching + Design  ( слои в архитектуре ) http://www.zend.com/en/products/platform/   (Zend Platform – aka Php Application Server –  стоит почитать) http://phpimpact.wordpress.com/category/frameworks/  (много интересных статей) http :// www . setti . biz /574/   (сравнение  CodeIgniter  с  Cake ) http://ajaxpatterns.org/Frameworks_Matrix  (матрица  JS -фреймворков) http://www.symfony-project.org/tutorial/1_0/my-first-project  (Symfony: 1st project ) http://paul-m-jones.com/blog/?p=236  (обзор производительности) http://manual.cakephp.org/view/326/the-cake-blog-tutorial  (1-й проект на  cake)
Есть вопросы? [email_address]   Icq: 286-41-77-45 Skype: horal777  Алексей Граков

More Related Content

php frameworks

  • 2. Этот доклад был прочитан на конференции Байнет 2.2 Beta. Минск, 11-12 сентября 2008. официальный сайт: www.bynet2.org
  • 3. Обычная разработка Cms 1 Cms 2 Super CMS Лучшая в мире CMS, потому, что я написал ее сам! Зачем что-то еще?
  • 4.  
  • 5. Потребность в фреймворках Разработка нестандартных проектов. Желание иметь под рукой хороший инструмент, который будет: - развиваться - иметь хорошую документацию - иметь качественный код - обеспечивать достаточную гибкость - содержать компоненты на все случаи жизни - бесплатным
  • 6. Преимущества фреймворков Один зверь, вместо зоопарка Ускорение сроков разработки Меньше внимания на мелочи, больше на бизнес логику Больший контроль над процессом и качеством разработки Хорошая документированность Быстрый ввод новичков на проект
  • 7. Php- фреймворки: codeIgniter cakePHP Symfony Zend Framework
  • 8. Цитируемость фреймворков в поисковиках Поисковик CakePhp Symfony CodeIgniter Zend Framework Google (world ) 3,680,000 1,440,000 544,000 3,280,000 Google EN 3,250,000 497,000 361,000 2,040,000 Google . ru 28100 20020 28,500 36,900 Yandex 90, 000 68, 000 87, 000 333, 000
  • 10. CakePHP:: Возможности Совместим с PHP4 и PHP5 MVC Своя файловая структура Своя абстракция данных (либо Adodb, PEAR::Db) Поддержка плагинов Валидация Scaffolding Маршрутизация запросов Компоненты / Хелперы / i18n
  • 12. CakePHP:: Соглашения Класс KissesAndHugsController должен храниться в   файле kisses_and_hugs_controller.php Название модели записывается в ед. числе: Book , MyBook , и т.п.  Названия таблиц должны быть в множественном числе, и через подчеркивание: my _ year _ books Названия множественном числе. BooksController , OxenController .
  • 13. CakePHP:: Контроллеры index – метод по умолчанию ( site.com/books/ ) Методы контроллера   beforeFilter – до логики beforeRender – до view afterFilter – после логики и после view
  • 14. CakePHP:: Модели Доступные методы в каждой модели: beforeFind() afterFind() beforeValidate() beforeSave() afterSave() beforeDelete() afterDelete()
  • 15. CakePHP:: Шаблоны Чистый PHP Smarty Место нахождения шаблона: /app/views/people/index. tpl
  • 16. CakePHP:: Проекты Fileshifter.com Server: Pentium 3, 733mhz, 512MB RAM, 2TB SATA RAID. OS: Fedora Linux, ext3 filesystem. Объем данных на сервере: 1.37 TB. Ежедневный траффик : 28 GB в среднем . Время отклика : 0.3-0.5 сек
  • 18. CodeIgniter Текущая версия 1.6.3 Гибкость Плагины / Хелперы Скаффолдинг Простота (loose coupling) MVC Поддержка PHP4 Настройка параметров автозагрузки
  • 19. CI:: Ход работы приложения
  • 20. CodeIgniter:: модели Классы моделей хранятся в папке application/models/ Класс: Model_name   Имя файла: application/models/ user_model.php Загрузка: $this->load->model(' Model_name '); $this-> Model_name ->function();
  • 21. CodeIgniter ::Контроллеры application/config/routes.php – маршруты $route['default_controller'] = ‘ XXX_controller '; class My_class extends Controller { …. } _remap ()
  • 22. CodeIgniter::View class Privet extends Controller { … . } Загрузка: $this->load->view(' name ');
  • 24. Symfony:: использует Creole – абстракция с БД Propel ( PDO с 1.2) Prado для i18n Spyc YAML парсинг Pake для командной строки (symfony 1.0) Prototype, Script.aculo.us, Dynarch.com, TinyMCE
  • 25. Symfony:: возможности I18n, l10n, cache, валидация и т.п. Scaffolding Генерация кода AdminGenerator Независимые блоки ( Loose coupling) Маршрутизация Хелперы Debug
  • 26. Symfony:: особенности Все классы начинаются с ‘sf’ (стандартные) class ##MODULE_NAME##Actions extends sfActions Много различного рода конфигурационных файлов.
  • 27.  
  • 28. Symfony:: Известные проекты bookmarks.yahoo.com (20 млн пользователей) www.splitgames.fr (сайт обмена играми) www.kuss.de ( сайт знакомств) www.winkel.ro (доска объявлений)
  • 29.  
  • 30. Zend Framework (ZF) Acl ( роли и ресурсы) Auth (openId, Microsoft InfoCard) Cache / Loader Config / Console_Getopt (cli) Date ( i18n, l10N) / Db Filter, Validate (34) / Gdata (Zend Google Data Client) Http_Client / Json / Locale, Log, Mail, Mime, Registry Rest_Client / Rest_Server Service: Akismet, Amazon, Delicious, Flickr, Nirvanix, Simpy, StrikeIron и Yahoo! / XmlRpc
  • 31. Новое в ZF 1.6 RC1 Интеграция с Dojo Поддержка с SOAP Unit -тесты для контроллеров Поддержка индексных файлов Lucene 2.3 Zend_Session – обработчик сохранения Paginator Zend_Config_Xml – поддержка атрибутов Медиа хелперы ( QuickTime, Flash)
  • 32. ZF в цифрах Более 7 миллионов загрузок Более 500 разработчиков Более 1000 страниц в справочнике Более 500 примеров Более 60 проектов на SourceForge Более 30 проектов на Google Code Около 70 различных компонентов.
  • 33. ZF:: соглашения Class My_Class_Name должен находится в файле : My/Class/Name.php C тиль кода во многом совпадает со стилями PEAR
  • 35. Zend_Controller_Response_Http Zend_Controller_Front Zend_Controller_Roulter_Rewrite ( выбирает action для запуска ) Zend_Controller_Dispatcher_Standard ( вызыает action) Zend_Controller_Action ( конкретный ) Using Zend_Action_Helper Zend_Controller_Request Zend_View ( использует Zend_View_Helper) Zend_Db_Table (Model ) Т.е. тут может быть Custom Model
  • 36. ZF:: Модели Zend_Db_Table PDO $db = Zend_Db::factory($cfgDb->type, $params); Zend_Db_Table::setDefaultAapter($db); Zend_Registry::set(&quot;DB&quot;, $db);
  • 37. ZF:: Контроллеры Zend_Controller_Action ErrorHandler plugin ViewRenderer action helper plugin preDispatch postDispatch Init
  • 38. ZF::View interface Zend_View_Interface public function render($name); public function assign($name); Zend_View_Abstract basePath, filters, helpers, _setHelperClass (filter) Zend/Controller/Action/Helper/ViewRenderer .php MyClass_View_Smarty extends Zend_View_Abstract
  • 39. ZF:: Проекты www.magentocommerce.com – движок для e-commerce, 0.5 млн скачиваний, 30 K users , 70 партнеров, 60+ языков, 150+ расширений (no java!) RightMedia – online реклама ( NY) 4-5 млрд показов в день, 100 K запросов / с, 19 K рекламодателей и партнеров (5 dev-6m) QEDWiki – IBM (mashups) PokerRoom.com – 12 млн users (25 srv, 16front, 9mysql, i18n, docs, routes:{playpoker, pokerSpielen}: (seo), ZP+JavaBridge
  • 41. Обычная страница без ORM Ыф Вид теста: ab – n 1000 – c XXX 512 ram, Intel Pentium 14oo MHz , Windows XP 1 10 50 cakePhp 5.21 4.98 5.02 Zend 7.67 7.86 7.77 CodeIgniter 1 6 . 13 15.44 15.42
  • 42. Вместе с ORM , без кеша. Ыф 512Mb RAM 1.8Ghz AMD Sempron под Ubuntu Gutsy (7.10) 1 10 50 cakePhp 3.6 3.7 3.8 Zend 21.5 21.2 21.7 CodeIgniter 9.3 9.1 9.2
  • 43. Ыф 512Mb RAM 1.8Ghz AMD Sempron под Ubuntu Gutsy (7.10) Вместе с ORM , APC кэшем Ыф 1 10 50 cakePhp 7.3 7.3 7.3 Zend 97.5 98.0 96.6 CodeIgniter 32.8 33.3 31.8
  • 45. Проект на Zend Framework
  • 46. ZF:: Пример проекта. Создаем сайт-сообщество. Несколько языков, несколько доменов, различные уровни доступа к ресурсам, маршрутизация, ORM.
  • 47. Организация разработки Zend Studio for Eclipse (или просто phpEclipse) Cruise Control + phpUnderControl PHPUnit ( Себастьян Бергман) Smarty SVN Ajax: xajax/jQuery/Dojo/Prototype/ и т.д. Firebug + FirePhp (FireZend) ORM (Doctrine) Memcached
  • 48. Zend_Config site.ru.xml site.eu.xml site.zone.xml <languages> <language>en</language> <language>ru</language> </languages>
  • 50. $view = new Socnet_View_Smarty(); $vRender = new Zend_Controller_Action_Helper_ViewRenderer($view); $vRender->setViewBasePathSpec( dirname( __FILE__).'/V/smarty/templates') ->setViewScriptPathSpec( ':module/:controller/:action.:suffix') ->setViewScriptPathNoControllerSpec( ':action.:suffix') ->setViewSuffix( 'tpl'); Zend_Controller_Action_HelperBroker::addHelper($vRender);
  • 51. Auth: $authAdapter = new Zend_Auth_Adapter_DbTable( $db, 'user', 'login', 'pass'); Zend_Registry::set(&quot;Auth&quot;, $authAdapter); Class myAdapter extends Zend_Auth_Adapter_Interface public function authenticate();
  • 52. ACL $roleAdmin = new Zend_Acl_Role(Socnet_Auth_Acl::ADMIN); $this->addRole($roleAdmin, $roleMember); $this->addResource( 'forum/topic'); $this->deny( null, null); // Запрет всем для всего. $this->allow( null, 'forum'); // всем доступ к форуму $this->allow( null, 'ajax'); // всем к ajax $this->allow( $admin, ‘admin');
  • 53. Маршрутизация $route = new Zend_Controller_Router_Route(ajax/:widgetName/:widgetAction', array( 'controller' => ‘ajax', 'action' => 'index', 'widgetName' => '', 'widgetAction' => 'index' )); $router->addRoute( 'widget_request', $route);
  • 54.  
  • 55. Unit- тестирование /tests Auth Controller Domain Model Members AllTests.php setUpEnvinronment.php
  • 56.  
  • 57.  
  • 58. Модели /generated |- BaseModelName ParticularModel extends BaseModelName phpDoctrine .yml fixtures
  • 59. if (extension_loaded('memcache')) { $frontendOptions = array( 'lifetime' => 7200, // cache lifetime of 2 hours 'automatic_serialization' => true ); $backendOptions = array(); $frontend = 'Core'; $backend = 'Memcached'; } else { $frontendOptions = array( 'lifetime' => 7200, // cache lifetime of 2 hours 'automatic_serialization' => true ); $backendOptions = array( 'cache_dir' => dirname(__FILE__).'/../tmp/' // ); $frontend = 'Core'; $backend = 'File'; } $cache = Zend_Cache::factory($frontend, $backend, $frontendOptions, $backendOptions); Zend_Registry::set( 'cache', $cache);
  • 60. Диспетчеризация extends Zend_Controller_Dispatcher_Standard $action = $this->getActionMethod($request); $doCall = !method_exists($controller, $action); $request->setDispatched( true); $controller->preDispatch(); $xajaxargs = $controller->_page->Xajax->getRequestParams(); $sResponse = call_user_func_array( array(&$controller, $action),$xajaxargs); if (is_a($sResponse, &quot;xajaxResponse&quot;)) { $sResponse = $sResponse->getXML(); } header($sContentHeader);
  • 63. Полезные ссылки Cakephp.org (cake-php.ru) – сайт фреймворка Cakeforge.com – набор готовых проектов на cake codeigniter.com (code-igniter.ru) – сайт фреймворка symfony-project.org - сайт фреймворка Framework.zend.com - сайт фреймворка Zendframework.ru - русский сайт + wiki ( новый) http://habrahabr.ru/blogs/zend_framework/31639/ (Интеграция Zend_Acl и MVC. Часть 1) http://lobach.info/develop/zf/integrating-zend-framework-and-doctrine/ (Интеграция Zend and Doctrin e ) http://phpimpact.wordpress.com/2008/08/04/php-applications-where-is-the-include-coming-from/ ( откуда инклюды) http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html (Prepared statements in mysql ) http://vanav.com.ua/post397 ( Сравнение скорости PDO, ADOdb, MDB2, Zend_Db , и т.п.) http://club.shelek.ru/viewart.php?id=300 (Сравнительный тест систем кэширования user data для PHP) http://www.dklab.ru/chicken/nablas/49.html ( оптимизация Загрузки в 22 раза - Котеров) http :// zendframework . ru / articles / chto _ takoe _ zend _ framework / (обзорно про ZF) http :// kpumuk . info / php / zend - framework - router - for - subdirectory - based - site /# more -31 ( Роутеры в Zend) http://devzone.zend.com/article/3811-Using-Zend_Tool-to-start-up-your-ZF-Project (Zend _ Tool – для создания рабочей копии проекта http://www.avnetlabs.com/php/php-frameworks-revisited-codeigniter-vs-zend-framework ( еще одно сравнение фреймворков) http://snook.ca/archives/php/codeigniter_vs_cakephp/ ( CI vs Cake) http://www.avnetlabs.com/php/php-framework-comparison-benchmarks ( Довольно хорошие сравнительные тесты)
  • 64. http://phpimpact.wordpress.com/2008/07/28/zend-framework-architecture/ ( архитектура Zend’a) http :// wiki . ringsidenetworks . org / display / ringside / Layering + and + Caching + Design ( слои в архитектуре ) http://www.zend.com/en/products/platform/ (Zend Platform – aka Php Application Server – стоит почитать) http://phpimpact.wordpress.com/category/frameworks/ (много интересных статей) http :// www . setti . biz /574/ (сравнение CodeIgniter с Cake ) http://ajaxpatterns.org/Frameworks_Matrix (матрица JS -фреймворков) http://www.symfony-project.org/tutorial/1_0/my-first-project (Symfony: 1st project ) http://paul-m-jones.com/blog/?p=236 (обзор производительности) http://manual.cakephp.org/view/326/the-cake-blog-tutorial (1-й проект на cake)
  • 65. Есть вопросы? [email_address] Icq: 286-41-77-45 Skype: horal777 Алексей Граков