SlideShare a Scribd company logo
Zend Framework и MVC27 марта 2010 г.Санкт-ПетербургРеализация Модели
ДокладчикСтешенко АлександрВедущий разработчик компании NoradaБолее 7-и лет разработки и проектирования программного обеспеченияБолее 2-х лет использования Zend Framework
Содержание докладаЧто такое MVC?MVC в Zend FrameworkРеализация модели
Что такое MVC?
Model View ControllerМодель (Model)отвечает за данные и поведение бизнес логики приложенияПредставление (View)- отвечает за логику связанную с отображением информацииКонтроллер (Controller)обрабатывает пользовательский ввод
оперирует моделью для изменения её состояния и получения необходимых данных
передает данные представлениюСхема отношений в MVC
MVC в Zend Framework
Zend_Controller_FrontШаблон проектирования Фронт Контроллер (Front Controller)Является так называемым «Одиночкой» (Singleton)Централизованная точка входа для всех запросовДелегирование запроса к специализированному обработчику (Zend_Controller_Action)
Инициализация приложенияФайл /public/index.php<?phpZend_Controller_Front::run('../application/controllers');
ДиспетчеризацияZend_Controller_Front координирует весь процесс жизни приложенияОбъект запроса (Request)-  POST, GET, SESSION, COOKIESМаршрутизатор (Router)Диспетчер (Dispatcher)Объект ответа (Response)- буферизация вывода
Zend_Controller_ActionАбстрактный класс для реализации MVC в Zend FrameworkНаследование Zend_Controller_Actionклассами - контроллерамиКласс – контроллер группируетнаборы обработчиков в виде публичных методов – действий.
Zend_Controller_ActionФайл ../application/controllers/GuestBookController.php<?phpclass GuestBookControllerextends Zend_Controller_Action{public function listCommentsAction()    {//[...]    }public function addCommentAction()    {//[...]    }}
Zend_ViewРеализация Представления в Zend FrameworkИнтерпретация «скриптов вида»Поддержка любых обработчиков шаблоновpublic function listAction(){$guestBookModel= new GuestBook();$comments = $guestBookModel->getComments();$view = new Zend_View();$view->comments = $comments;echo $view->render('guest-book.php');}
Скрипт вида guest-book.phpФайл ../application/views/scripts/guest-book.php<html><head><title>Comments</title></head><body><div>Comments:</div><?phpforeach($this->comments as $comment): ?><div class = "comment"><?phpecho $this->trim($comment); ?></div><?phpendforeach; ?></body></html>
Помощники видаМеханизм для расширения функциональности Видаповторяемая логика представления
форматированние данных
доступ к МоделиФайл ../application/views/helpers/Trim.php<?phpclass My_View_Helper_Trim{public function trim($value)    {return trim($value);    }}
Помощник действия ViewRendererПомощники действия:Способ расширить функциональность контроллеров
Перехватчики событийАвтоматизация настройки объекта ВидаАвтоматизация рендеринга шаблонов
Помощник действия ViewRendererФайл ../application/controllers/GuestBookController.phpclass GuestBookControllerextends Zend_Controller_Action{public function listComments()    {$guestBookModel= new GuestBook();$comments = $guestBookModel->getComments();$this->view->comments = $comments;    } }Файл ../application/views/scripts/guest-book/list.phtml<?phpforeach($this->comments as $comment): ?><div class=“comment”><?phpecho $comment ?></div><?phpendforeach; ?>
Модель
Zend_Model… ?Zend Framework предоставляет набор вспомогательных компонент для реализации моделиМодель – результат процесса моделирования прикладной системы
«Тонкая» модельКонтроллер выполняет все функции моделибизнес логика
чтение и запись данных
проверка входящей информацииРоль модели заключается в доступе к данным
«Тонкая» модельФайл ../application/models/GuestBook.php<?phpclass GuestBookextends Zend_Db_Table_Abstract{protected $_name = "comments";}
«Толстый» контроллерclass CommentsControllerextends Zend_Controller_Action{public function listComments()    {$postId= $this->_request->getParam("postid");$isUser= $this->_request->getCookie("user");$guestBook= new GuestBook();$rows = $guestBook->fetchAll("post_id = ?", $postId);$commentsNumber= count($rows);$comments = array();$hiddenComments= array();foreach($rows as $row) {if ($row["visible"] == 1) {$comments[] = $row["text"];            } else {if ($isUser) {$hiddenComments[] = $row["text"];                 }            }        }$this->view->comments = $comments;$this->view->hiddenComments = $hiddenComments;    }}
«Толстая» модельФайл ../application/models/GuestBook.php<?phpclass GuestBook{protected $dbTableGateway;public function getVisibleCommentsByPostId()    {    }public function getHiddenCommentsByPostId()    {    }}
«Тонкий» контроллерpublic function listComments(){$postId= $this->_request->getParam("post");$isUser= $this->_request->getCookie("user");$guestBook= new GuestBook();$comments = $guestBook->getVisibleCommentsByPostId($postId, $isUser);$hiddenComments= $guestBook->getHiddenCommentsByPostId($postId, $isUser);$this->view->comments = $comments;$this->view->hiddenComments = $hiddenComments;}
Слои (Layers)
Сервисный слойШаблон проектирования ФасадСкрывает реализацию объектов бизнес логики и их взаимодействие-  Валидация пользовательского вводаАвторизация и проверка прав доступаGuestBookServiceФайл ../application/models/GuestBookService.php<?phpclass GuestBookService{//[...]public function addComment($commentData)    {$validator= $this->getCommentValidator();if ($validator->isValid($commentData)) {$this->getCommentTable()->insert($commentData);           }    }}
Доменная модельСлой инкапсулирующий объекты бизнес логики и взаимодействие между нимиОтделяет бизнес логику системы от доступа к данным и сервисного слоя
Пользователь (User)Файл ../application/models/User.php<?phpclass User{protected $_name;protected $_comments;public function isAdmin(){/*[...]*/}public function authenticate(){/*[...]*/}public function getName(){/*[...]*/}public function getComments(){/*[...]*/}}
Комментарий (Comment)Файл ../application/models/Comment.php<?phpclass Comment{protected $_text;/**      * Returns comment’s author      *      * @return User      */public function getAuthor()    {return $this->_user;    }}
Слой доступа к даннымРеляционные базы данныхZend_DbФайловая система Веб сервисыZend_Feed
Zend_ServiceКеш- Zend_Cache
Table Data Gateway<?php$usersGateway= new UsersGateway();// Добавление нового пользователя$usersGateway->insert($userData);// Обновление данных пользователя$usersGateway->update($userId, $userData);// Удаление пользователя$usersGateway->delete($userId);// Чтение данных$rows = $usersGateway->findAllByAddress($address);// Преобразование в доменные объекты$users = array();foreach($rows as $row) {$users[] = new User($row);}
Zend_Db_Table<?phpclass UsersGatewayextends Zend_Db_Table_Abstract{protected $_name = 'users';public function findAllByAddress($address)    {$where = $this->getAdapter()                      ->quoteInto('adress = ?', $address);$rows = $this->fetchAll($where);return $rows;    }}
Active Record / ORM// Добавление нового пользователя$user = new User($userData);$user->save();// Обновление данных$user->setName($newUserName);$user->save();// Удаление записи о пользователе$user->delete();// Чтение данных$users = $userFinder->findAllByAddress($address);// или$users = User::findAllByAddress($address);

More Related Content

What's hot (20)

course js day 4
course js day 4
Georgyi Grigoryev
 
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2
Paul Klimov
 
Общая архитектура Yii2
Общая архитектура Yii2
Paul Klimov
 
Денис Чистяков: DOM, jQuery и все, все, все
Денис Чистяков: DOM, jQuery и все, все, все
Yandex
 
Making Scalable JavaScript Application
Making Scalable JavaScript Application
Mikhail Davydov
 
Javascript
Javascript
Vasya Petrov
 
Ci
Ci
Mac'Kensi Lord
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
Vasya Petrov
 
Rambler.iOS #8: Как не стать жертвой бэкендеров
Rambler.iOS #8: Как не стать жертвой бэкендеров
RAMBLER&Co
 
Render API.
Render API.
DrupalForumZP2012
 
10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)
Roman Brovko
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
Vasya Petrov
 
Crazy owl yii1=> yii2
Crazy owl yii1=> yii2
Alexei Smolyanov
 
Использование API Яндекс.Карт
Использование API Яндекс.Карт
FDConf
 
Сущности в Drupal 7
Сущности в Drupal 7
Itech4Web
 
"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндекс
it-people
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
Paul Klimov
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.
DrupalCampDN
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2
Paul Klimov
 
QA Fest 2019. Андрей Солнцев. Selenide для профи
QA Fest 2019. Андрей Солнцев. Selenide для профи
QAFest
 
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2
Paul Klimov
 
Общая архитектура Yii2
Общая архитектура Yii2
Paul Klimov
 
Денис Чистяков: DOM, jQuery и все, все, все
Денис Чистяков: DOM, jQuery и все, все, все
Yandex
 
Making Scalable JavaScript Application
Making Scalable JavaScript Application
Mikhail Davydov
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
Vasya Petrov
 
Rambler.iOS #8: Как не стать жертвой бэкендеров
Rambler.iOS #8: Как не стать жертвой бэкендеров
RAMBLER&Co
 
10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)
Roman Brovko
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
Vasya Petrov
 
Использование API Яндекс.Карт
Использование API Яндекс.Карт
FDConf
 
Сущности в Drupal 7
Сущности в Drupal 7
Itech4Web
 
"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндекс
it-people
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
Paul Klimov
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.
DrupalCampDN
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2
Paul Klimov
 
QA Fest 2019. Андрей Солнцев. Selenide для профи
QA Fest 2019. Андрей Солнцев. Selenide для профи
QAFest
 

Viewers also liked (20)

ParaEmpezarSeasonsandWeather
ParaEmpezarSeasonsandWeather
SenoraAmandaWhite
 
Lone Star College Tomball Community Library
Lone Star College Tomball Community Library
guest54f40230
 
Moshnyaga The Use Of Eye Tracking For Pc Energy Management
Moshnyaga The Use Of Eye Tracking For Pc Energy Management
Kalle
 
Sana samad evaluation- reflection journal
Sana samad evaluation- reflection journal
Sana Samad
 
Morimoto Context Switching For Fast Key Selection In Text Entry Applications
Morimoto Context Switching For Fast Key Selection In Text Entry Applications
Kalle
 
Cd covers
Cd covers
Katherine Brittain
 
DIY Handout: Victoria L. Martinez
DIY Handout: Victoria L. Martinez
Bobby Raleigh
 
השגת רציפות טריטוריאלית במלחמת העצמאות
השגת רציפות טריטוריאלית במלחמת העצמאות
haimkarel
 
Testcase
Testcase
Oana Feidi
 
XNA coding series
XNA coding series
Uditha Bandara (.NET MVP)
 
Fundamentos da educação especial inclusiva
Fundamentos da educação especial inclusiva
Geisse Martins
 
testeeeestes
testeeeestes
Marcelo Cost
 
Inlichtingenfunctie Presentatie 17 3 2010
Inlichtingenfunctie Presentatie 17 3 2010
BertilVoogd
 
Blignaut Visual Span And Other Parameters For The Generation Of Heatmaps
Blignaut Visual Span And Other Parameters For The Generation Of Heatmaps
Kalle
 
India Horizontal Plant
India Horizontal Plant
Vibhanshu Sharma
 
ParaEmpezarSeasonsandWeather
ParaEmpezarSeasonsandWeather
SenoraAmandaWhite
 
Lone Star College Tomball Community Library
Lone Star College Tomball Community Library
guest54f40230
 
Moshnyaga The Use Of Eye Tracking For Pc Energy Management
Moshnyaga The Use Of Eye Tracking For Pc Energy Management
Kalle
 
Sana samad evaluation- reflection journal
Sana samad evaluation- reflection journal
Sana Samad
 
Morimoto Context Switching For Fast Key Selection In Text Entry Applications
Morimoto Context Switching For Fast Key Selection In Text Entry Applications
Kalle
 
DIY Handout: Victoria L. Martinez
DIY Handout: Victoria L. Martinez
Bobby Raleigh
 
השגת רציפות טריטוריאלית במלחמת העצמאות
השגת רציפות טריטוריאלית במלחמת העצמאות
haimkarel
 
Fundamentos da educação especial inclusiva
Fundamentos da educação especial inclusiva
Geisse Martins
 
Inlichtingenfunctie Presentatie 17 3 2010
Inlichtingenfunctie Presentatie 17 3 2010
BertilVoogd
 
Blignaut Visual Span And Other Parameters For The Generation Of Heatmaps
Blignaut Visual Span And Other Parameters For The Generation Of Heatmaps
Kalle
 
Ad

Similar to ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1) (20)

Yserver
Yserver
drupalconf
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf Conference
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
ZFConf Conference
 
Интеграция Яндекс Сервер
Интеграция Яндекс Сервер
PVasili
 
My batis
My batis
Vitali Kviatkouski
 
MyBatis на практике
MyBatis на практике
Vitebsk Miniq
 
Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?
Stepan Tanasiychuk
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Dev_Party
 
Yii: миграции и инсталляции
Yii: миграции и инсталляции
Paul Klimov
 
MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)
GoSharp
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
2ГИС Технологии
 
Zend Framework и Doctrine
Zend Framework и Doctrine
Stepan Tanasiychuk
 
Почему Mojolicious?
Почему Mojolicious?
Anatoly Sharifulin
 
Mojolicious
Mojolicious
Точка Кипения
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
Moscow.pm
 
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
OdessaJS Conf
 
UWDC 2013, Yii2
UWDC 2013, Yii2
Alexander Makarov
 
Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015
Sergey Biryukov
 
Страх и ненависть в исходном коде
Страх и ненависть в исходном коде
Kolya Korobochkin
 
Zend framework 2
Zend framework 2
Alex Simanovich
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf Conference
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
ZFConf Conference
 
Интеграция Яндекс Сервер
Интеграция Яндекс Сервер
PVasili
 
MyBatis на практике
MyBatis на практике
Vitebsk Miniq
 
Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?
Stepan Tanasiychuk
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Dev_Party
 
Yii: миграции и инсталляции
Yii: миграции и инсталляции
Paul Klimov
 
MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)
GoSharp
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
2ГИС Технологии
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
Moscow.pm
 
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
OdessaJS Conf
 
Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015
Sergey Biryukov
 
Страх и ненависть в исходном коде
Страх и ненависть в исходном коде
Kolya Korobochkin
 
Ad

More from ZFConf Conference (20)

ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf Conference
 
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf Conference
 
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf Conference
 
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf Conference
 
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf Conference
 
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf Conference
 
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf Conference
 
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf Conference
 
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf Conference
 
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf Conference
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf Conference
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf Conference
 
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf Conference
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf Conference
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf Conference
 
ZFConf 2010: History of e-Shtab.ru
ZFConf 2010: History of e-Shtab.ru
ZFConf Conference
 
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf Conference
 
ZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework Applications
ZFConf Conference
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf Conference
 
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
ZFConf Conference
 
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf Conference
 
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf Conference
 
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf Conference
 
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf Conference
 
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf Conference
 
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf Conference
 
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf Conference
 
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf Conference
 
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf Conference
 
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf Conference
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf Conference
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf Conference
 
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf Conference
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf Conference
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf Conference
 
ZFConf 2010: History of e-Shtab.ru
ZFConf 2010: History of e-Shtab.ru
ZFConf Conference
 
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf Conference
 
ZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework Applications
ZFConf Conference
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf Conference
 
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
ZFConf Conference
 

ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)