Разработка на Yii QuartSoft Corp. Системный архитектор Климов П.В.

Презентация:



Advertisements
Похожие презентации
Java Server Pages(JSP). JavaServer Pages (JSP) позволяют вам отделить динамическую часть ваших страниц от статического HTML. Вы, как обычно, пишете обычный.
Advertisements

WinCC Работа и мониторинг Siemens AG All rights reserved.© TC Nbg.-M Date: File: E02OFFe.PPT Catalog: NWINCC Открытость и способность.
Work with databases in Java. JDBC Tutorial for students of universities Author: Dudnik Oxana.
Что нового в PHP 5.3Что нового в PHP 5.3Почему PHP 5.3? PHP 5.2 существует уже 1.5 года. В нем найдено несколько серьезных ошибок, которые не могут быть.
© 2009 Avaya Inc. All rights reserved.1 Chapter Two, Voic Pro Components Module Two – Actions, Variables & Conditions.
Что нового в PHP 5.3 Дмитрий Стогов.
WORKSHOP 8D TENSION COUPON. WS8D-2 NAS120, Workshop 8D, May 2006 Copyright 2005 MSC.Software Corporation.
Date: File:GRAPH_04e.1 SIMATIC S7 Siemens AG All rights reserved. SITRAIN Training for Automation and Drives Debug and Start-Up.
Шаблоны проектирования ООП. Принципы ООП Инкапсуляция Наследование Полиморфизм Абстракция данных.
Java Collections Framework (JCF) in Java Tutorial for students of universities Author: Oxana Dudnik.
2 Web applications are easier to create than ever!
Structured Error Handling in the ABL Sarah Marshall QA Architect, OpenEdge Session 128.
PL/SQL Пакеты. Определение Пакет – это объект схемы данных, объединяющий набор типов, объектов и подпрограмм PL/SQL.
Toolbar enabling the user to carry out actions on the objects to reconcile Objects to reconcile tree: Instances and documents attached are displayed Tabs.
WORKSHOP 10 SUPPORT BRACKET. WS10-2 NAS120, Workshop 10, May 2006 Copyright 2005 MSC.Software Corporation.
PHP&Flex - новая альтернатива для создания RIAs Иванников Андрей Улич Дмитрий.
Loader Design Options Linkage Editors Dynamic Linking Bootstrap Loaders.
© 2006 Cisco Systems, Inc. All rights reserved. HIPS v Creating Application Classes Working with Variables and Application Classes.
© 2006 Cisco Systems, Inc. All rights reserved. HIPS v Administering Events and Generating Reports Managing Events.
Work with server by XMLRPC – library in Java For students Author: Dudnik Oxana.
Транксрипт:

Разработка на Yii QuartSoft Corp. Системный архитектор Климов П.В.

Yii – PHP Framework ООП Модульность Простота Высокое быстродействие Основные характеристики:

Prado Ruby on Rails jQuery Symfony Joomla Истоки Yii:

Магия в PHP class Component { public $publicProperty; protected $_protectedProperty; public function setProtectedProperty($value) { $this->_protectedProperty = $value; return true; } public function getProtectedProperty() { return $this->_protectedProperty; }

class Component { public function __get($propertyName) { $methodName = 'get'.$propertyName; if (method_exists($this, $methodName)) { return call_user_func( array($this, $methodName) ); } else { throw new Exception("Missing property {$propertyName}'!"); } public function __set($propertyName, $value) { $methodName = 'set'.$propertyName; if (method_exists($this, $methodName)) { return call_user_func( array($this, $methodName), $value ); } else { throw new Exception("Missing property {$propertyName}'!"); }

$component = new Component(); $component->publicProperty = 'Public value'; echo($component->publicProperty); $component->protectedProperty = 'Protected value'; echo($component->protectedProperty);

Автозагрузка классов require_once('components/SomeClass.php'); $someObj = new SomeClass(); … require_once('components/OtherClass.php'); $otherObj = new OtherClass(); … require_once('components/SomeClass.php'); $anotherSomeObj = new SomeClass(); Подключение файлов по принципу DLL:

class Autoloader { public function autoload($className) { $classFileName = components/'.$className.'.php'; if (file_exists($classFileName)) { require_once($classFileName); return true; } return false; } public function register() { return spl_autoload_register( array($this, 'autoload') ); } public function __construct() { $this->register(); }

Автозагрузка классов в контексте Yii: Yii::import(application.components.SomeClass'); Yii::import(application.components.OtherClass'); … $someObj = new SomeClass(); SomeComponent => /home/www/…/components/SomeClass.php, OtherComponent => /home/www/…/components/OtherClass.php, «Карта» автозагрузки классов:

Порождение компонентов function createComponent(array $componentConfig) { $className = $componentConfig['class']; if (empty($className)) { throw new Exception(Missing parameter "class"!'); } unset($componentConfig['class']); if (!class_exists($className)) { Yii::import($className); // Автозагрузка } $component = new $className(); foreach($componentConfig as $name=>$value) { $component->$name = $value; // Конфигурация } return $component; }

$componentConfig = array( 'class'=>'CUrlManager', 'urlFormat'=>'path', 'showScriptName'=>false, 'rules'=>array( '/'=>'site/index', ' / *'=>' /view', ), ); $component = createComponent($componentConfig); Задание любого объекта через массив:

Фабрика компонентов Component Factory $componentsConfig $components * 1 Create and store by name ComponentAComponentB Client createComponent() getComponent() Request component by name …

Одиночка (Singleton) class Singleton { private static $_selfInstance = null; public static function getInstance() { if (!is_object(self::$_selfInstance)) { self::$_selfInstance = new Singleton(); } return self::$_selfInstance; } private function __construct() { // закрытый конструктор } $singleton = Singleton::getInstance();

Фабрика компонентов(Component Factory) + Одиночка (Singleton) = Приложение Yii (Yii Application)

$config = array( 'name'=>'My Web Application', … 'components'=>array( 'user'=>array( 'allowAutoLogin'=>true, ), … ), ); Yii::createWebApplication($config)->run(); … $application = Yii::app(); $user = Yii::app()->getComponent(user);

MVC в Yii Controller Widget ModelView Application Application Components

Маршрутизация web запроса :Application :Request :UrlManager :Controller Apache run get request get route by request controller/action run action output request

Доступ к базе данных через PDO PDOClientPDO Driver PDO MySQLPDO PostgreSQL … 1 1 MySQL PostgreSQL

Абстракция базы данных PDO Client 1 DbConnection DbSchema Schema MySQL Schema PostgreSQL 1 … DbCommand Control information 1 1 Compose and execute queries * 1

Active Record ActiveFinder insert() update() delete() find() populateRecord() Client DbCommand Find self instances Instantiate by query result Database access 1 * * * *

$allUsers = User::model()->findAll(); $newUser = new User(); $newUser->name = new user; $newUser->save(); $existingUser = User::model()->findByName(testuser); $existingUser-> = $existingUser->save();

События (Events) в Yii Component raiseEvent() eventHandlers Event sender data Handler * * * Raise Handle List of PHP callbacks PHP Callback

function handleBeforeSave(CEvent $event) { $sender = $event->sender; // Изменяем состояние отправителя события: $sender->create_date = date('Y-m-d H:i:s', strtotime('NOW')); } $user = new User(); // Назначаем обработчик события: $user->onBeforeSave = handleBeforeSave; $user->name = test name; $user->save(); echo $user->create_date; // Вывод: :42

Проблема множественного наследования ActiveRecord ArPosition Save custom records display order ArFile Bind physical file with the db record ArPositionFile Position + File

Поведение (Behavior) Component __call() attachBehavior() behaviors Behavior getOwner() events() owner 1 * Event data 1 1 * * Raise Handle

class ArBehaviorExample extends CBehavior { public function behaviorMethod() { $owner = $this->getOwner(); $owner->create_date = date('Y-m-d H:i:s', strtotime('NOW')); } $user = new User(); // Добавляем поведение: $behavior = new ArBehaviorExample(); $user->attachBehavior($behavior); // Вызываем метод поведения: $user->behaviorMethod(); echo $user->create_date; // Вывод: :46

Yii Динамический код Компонентная структура Приложение = «одиночка» + «фабрика» Отложенная загрузка и создание объектов MVC «PDO» и «Active Record» События Поведения