'

Обзор PHP-фреймвокров. Разработка веб-проектов на Zend Framework

Понравилась презентация – покажи это...





Слайд 0

Обзор PHP-фреймвокров. Разработка веб-проектов на Zend Framework Граков Алексей Antalika.com


Слайд 1

Этот доклад был прочитан на конференции Байнет 2.2 Beta. Минск, 11-12 сентября 2008. официальный сайт: www.bynet2.org


Слайд 2

Обычная разработка Cms 1 Cms 2 Super CMS Лучшая в мире CMS, потому, что я написал ее сам! Зачем что-то еще?


Слайд 3


Слайд 4

Потребность в фреймворках Разработка нестандартных проектов. Желание иметь под рукой хороший инструмент, который будет: - развиваться - иметь хорошую документацию - иметь качественный код - обеспечивать достаточную гибкость - содержать компоненты на все случаи жизни - бесплатным


Слайд 5

Преимущества фреймворков Один зверь, вместо зоопарка Ускорение сроков разработки Меньше внимания на мелочи, больше на бизнес логику Больший контроль над процессом и качеством разработки Хорошая документированность Быстрый ввод новичков на проект


Слайд 6

Php-фреймворки: codeIgniter cakePHP Symfony Zend Framework


Слайд 7

Цитируемость фреймворков в поисковиках


Слайд 8

Cake PHP


Слайд 9

CakePHP::Возможности Совместим с PHP4 и PHP5 MVC Своя файловая структура Своя абстракция данных (либо Adodb, PEAR::Db) Поддержка плагинов Валидация Scaffolding Маршрутизация запросов Компоненты / Хелперы / i18n


Слайд 10

CakePHP::Обработка запросов


Слайд 11

CakePHP::Соглашения Класс KissesAndHugsController должен храниться в файле kisses_and_hugs_controller.php Название модели записывается в ед. числе: Book, MyBook, и т.п.  Названия таблиц должны быть в множественном числе, и через подчеркивание: my_year_books Названия множественном числе. BooksController, OxenController.


Слайд 12

CakePHP::Контроллеры index – метод по умолчанию ( site.com/books/ ) Методы контроллера   beforeFilter – до логики beforeRender – до view afterFilter – после логики и после view


Слайд 13

CakePHP::Модели Доступные методы в каждой модели: beforeFind() afterFind() beforeValidate() beforeSave() afterSave() beforeDelete() afterDelete()


Слайд 14

CakePHP::Шаблоны Чистый PHP Smarty Место нахождения шаблона: /app/views/people/index.tpl


Слайд 15

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 сек


Слайд 16

Code Igniter


Слайд 17

CodeIgniter Текущая версия 1.6.3 Гибкость Плагины / Хелперы Скаффолдинг Простота (loose coupling) MVC Поддержка PHP4 Настройка параметров автозагрузки


Слайд 18

CI::Ход работы приложения


Слайд 19

CodeIgniter::модели Классы моделей хранятся в папке application/models/ Класс: Model_name  Имя файла: application/models/user_model.php Загрузка: $this->load->model('Model_name'); $this->Model_name->function();


Слайд 20

CodeIgniter::Контроллеры application/config/routes.php – маршруты $route['default_controller'] = ‘XXX_controller'; class My_class extends Controller { …. } _remap ()


Слайд 21

CodeIgniter::View class Privet extends Controller { …. } Загрузка: $this->load->view('name');


Слайд 22

Symfony


Слайд 23

Symfony::использует Creole – абстракция с БД Propel ( PDO с 1.2) Prado для i18n Spyc YAML парсинг Pake для командной строки(symfony 1.0) Prototype, Script.aculo.us, Dynarch.com, TinyMCE


Слайд 24

Symfony::возможности I18n, l10n, cache, валидация и т.п. Scaffolding Генерация кода AdminGenerator Независимые блоки (Loose coupling) Маршрутизация Хелперы Debug


Слайд 25

Symfony::особенности Все классы начинаются с ‘sf’ (стандартные) class ##MODULE_NAME##Actions extends sfActions Много различного рода конфигурационных файлов.


Слайд 26


Слайд 27

Symfony::Известные проекты bookmarks.yahoo.com (20 млн пользователей) www.splitgames.fr (сайт обмена играми) www.kuss.de (сайт знакомств) www.winkel.ro (доска объявлений)


Слайд 28


Слайд 29

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


Слайд 30

Новое в ZF 1.6 RC1 Интеграция с Dojo Поддержка с SOAP Unit-тесты для контроллеров Поддержка индексных файлов Lucene 2.3 Zend_Session – обработчик сохранения Paginator Zend_Config_Xml – поддержка атрибутов Медиа хелперы (QuickTime, Flash)


Слайд 31

ZF в цифрах Более 7 миллионов загрузок Более 500 разработчиков Более 1000 страниц в справочнике Более 500 примеров Более 60 проектов на SourceForge Более 30 проектов на Google Code Около 70 различных компонентов.


Слайд 32

ZF::соглашения Class My_Class_Name должен находится в файле: My/Class/Name.php Cтиль кода во многом совпадает со стилями PEAR


Слайд 33

ZF::Front Controller Pattern


Слайд 34

Zend_Controller_Response_Http


Слайд 35

ZF::Модели Zend_Db_Table PDO $db = Zend_Db::factory($cfgDb->type, $params); Zend_Db_Table::setDefaultAapter($db); Zend_Registry::set("DB", $db);


Слайд 36

ZF::Контроллеры Zend_Controller_Action ErrorHandler plugin ViewRenderer action helper plugin preDispatch postDispatch Init


Слайд 37

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


Слайд 38

ZF::Проекты www.magentocommerce.com – движок для e-commerce, 0.5млн скачиваний, 30K users, 70 партнеров, 60+ языков, 150+ расширений (no java!) RightMedia – online реклама (NY) 4-5млрд показов в день, 100K запросов/с, 19K рекламодателей и партнеров (5 dev-6m) QEDWiki – IBM (mashups) PokerRoom.com – 12млн users (25 srv, 16front, 9mysql, i18n, docs, routes:{playpoker, pokerSpielen}: (seo), ZP+JavaBridge


Слайд 39

Производительность Почти Hello World test ;-)


Слайд 40

Обычная страница без ORM Ыф Вид теста: ab –n 1000 –c XXX 512 ram, Intel Pentium 14oo MHz, Windows XP


Слайд 41

Вместе с ORM, без кеша. Ыф 512Mb RAM 1.8Ghz AMD Sempron под Ubuntu Gutsy (7.10)


Слайд 42

Ыф 512Mb RAM 1.8Ghz AMD Sempron под Ubuntu Gutsy (7.10) Вместе с ORM, APC кэшем Ыф


Слайд 43

Symfony performance


Слайд 44

Проект на Zend Framework


Слайд 45

ZF::Пример проекта. Создаем сайт-сообщество. Несколько языков, несколько доменов, различные уровни доступа к ресурсам, маршрутизация, ORM.


Слайд 46

Организация разработки Zend Studio for Eclipse (или просто phpEclipse) Cruise Control + phpUnderControl PHPUnit (Себастьян Бергман) Smarty SVN Ajax: xajax/jQuery/Dojo/Prototype/и т.д. Firebug + FirePhp (FireZend) ORM (Doctrine) Memcached


Слайд 47

Zend_Config site.ru.xml site.eu.xml site.zone.xml <languages> <language>en</language> <language>ru</language> </languages>


Слайд 48

bootstrap.php initView(); initRoutes(); initFrontend();


Слайд 49

$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);


Слайд 50

Auth: $authAdapter = new Zend_Auth_Adapter_DbTable( $db, 'user', 'login', 'pass'); Zend_Registry::set("Auth", $authAdapter); Class myAdapter extends Zend_Auth_Adapter_Interface public function authenticate();


Слайд 51

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');


Слайд 52

Маршрутизация $route = new Zend_Controller_Router_Route(ajax/:widgetName/:widgetAction', array( 'controller' => ‘ajax', 'action' => 'index', 'widgetName' => '', 'widgetAction' => 'index' )); $router->addRoute('widget_request', $route);


Слайд 53


Слайд 54

Unit-тестирование /tests Auth Controller Domain Model Members AllTests.php setUpEnvinronment.php


Слайд 55


Слайд 56


Слайд 57

Модели /generated |- BaseModelName ParticularModel extends BaseModelName phpDoctrine .yml fixtures


Слайд 58

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);


Слайд 59

Диспетчеризация 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, "xajaxResponse")) { $sResponse = $sResponse->getXML(); } header($sContentHeader);


Слайд 60

motofriends.ru


Слайд 61

Выводы:


Слайд 62

Полезные ссылки 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 Doctrine) 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 (Довольно хорошие сравнительные тесты)


Слайд 63

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)


Слайд 64

Есть вопросы? alex@antalika.com Icq: 286-41-77-45 Skype: horal777 Алексей Граков


×

HTML:





Ссылка: