Разработка на Yii               Системный архитектор                       Климов П.В.     QuartSoft Corp.
Yii – PHP FrameworkОсновные характеристики:•   ООП•   Модульность•   Простота•   Высокое быстродействие
Истоки Yii:•   Prado•   Ruby on Rails•   jQuery•   Symfony•   Joomla
Магия в PHPclass Component {   public $publicProperty;   protected $_protectedProperty;    public function setProtectedPro...
class Component {  public function __get($propertyName) {    $methodName = get.$propertyName;    if (method_exists($this, ...
$component = new Component();$component->publicProperty = Public value;echo($component->publicProperty);$component->protec...
Автозагрузка классовПодключение файлов по принципу DLL:require_once(components/SomeClass.php);$someObj = new SomeClass();…...
class Autoloader {  public function autoload($className) {    $classFileName = ‘components/.$className..php;    if (file_e...
Автозагрузка классов в контексте Yii: Yii::import(‘application.components.SomeClass); Yii::import(‘application.components....
Порождение компонентовfunction createComponent(array $componentConfig) {    $className = $componentConfig[class];    if (e...
Задание любого объекта через массив:$componentConfig = array(   class=>CUrlManager,   urlFormat=>path,   showScriptName=>f...
Фабрика компонентов                    “Request component                    by name”     Factory                         ...
Одиночка (Singleton)class Singleton {  private static $_selfInstance = null;    public static function getInstance() {    ...
Фабрика компонентов(Component Factory)                   +          Одиночка (Singleton)                   =     Приложени...
$config = array(   name=>My Web Application,   …   components=>array(        user=>array(              allowAutoLogin=>tru...
MVC в Yii ApplicationComponents         Application                   Controller                    Widget        Model   ...
Маршрутизация web запроса             :ApplicationApache            ‘run’                            :Request             ...
Доступ к базе данных через           PDO                   1      1 Client      PDO                PDO Driver PDO MySQL   ...
Абстракция базы данных         1   1PDO              DbConnection            “Control                                     ...
Active Record            “Find self instances”     1                           1Client                                    ...
$allUsers = User::model()->findAll();$newUser = new User();$newUser->name = ‘new user’;$newUser->save();$existingUser = Us...
События (Events) в Yii                    1  Component                            “Raise”                                 ...
function handleBeforeSave(CEvent $event) {  $sender = $event->sender;  // Изменяем состояние отправителя события:  $sender...
Проблема множественного     наследования                      ActiveRecord   ArPosition                                   ...
Поведение (Behavior)                    1 Component                        *      Behaviorbehaviors                       ...
class ArBehaviorExample extends CBehavior {  public function behaviorMethod() {    $owner = $this->getOwner();    $owner->...
Yii•   Динамический код•   Компонентная структура•   Приложение = «одиночка» + «фабрика»•   Отложенная загрузка и создание...
Upcoming SlideShare
Loading in...5
×

Yii development

834

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
834
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Yii development

  1. 1. Разработка на Yii Системный архитектор Климов П.В. QuartSoft Corp.
  2. 2. Yii – PHP FrameworkОсновные характеристики:• ООП• Модульность• Простота• Высокое быстродействие
  3. 3. Истоки Yii:• Prado• Ruby on Rails• jQuery• Symfony• Joomla
  4. 4. Магия в PHPclass Component { public $publicProperty; protected $_protectedProperty; public function setProtectedProperty($value) { $this->_protectedProperty = $value; return true; } public function getProtectedProperty() { return $this->_protectedProperty; }}
  5. 5. 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}!"); } }
  6. 6. $component = new Component();$component->publicProperty = Public value;echo($component->publicProperty);$component->protectedProperty = Protected value;echo($component->protectedProperty);
  7. 7. Автозагрузка классовПодключение файлов по принципу DLL:require_once(components/SomeClass.php);$someObj = new SomeClass();…require_once(components/OtherClass.php);$otherObj = new OtherClass();…require_once(components/SomeClass.php);$anotherSomeObj = new SomeClass();
  8. 8. 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(); }}
  9. 9. Автозагрузка классов в контексте 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’,
  10. 10. Порождение компонентов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;}
  11. 11. Задание любого объекта через массив:$componentConfig = array( class=>CUrlManager, urlFormat=>path, showScriptName=>false, rules=>array( /=>site/index, <controller:w+>/<id:d+>*=><controller>/view, ),);$component = createComponent($componentConfig);
  12. 12. Фабрика компонентов “Request component by name” Factory Client$componentsConfig$components “Create and store 1 by name”createComponent() * ComponentgetComponent() ComponentA ComponentB …
  13. 13. Одиночка (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();
  14. 14. Фабрика компонентов(Component Factory) + Одиночка (Singleton) = Приложение Yii (Yii Application)
  15. 15. $config = array( name=>My Web Application, … components=>array( user=>array( allowAutoLogin=>true, ), … ),);Yii::createWebApplication($config)->run();…$application = Yii::app();$user = Yii::app()->getComponent(‘user’);
  16. 16. MVC в Yii ApplicationComponents Application Controller Widget Model View
  17. 17. Маршрутизация web запроса :ApplicationApache ‘run’ :Request ‘get request’ ‘request’ :UrlManager ‘get route by request’ ‘controller/action’ :Controller ‘run action’ ‘output’
  18. 18. Доступ к базе данных через PDO 1 1 Client PDO PDO Driver PDO MySQL PDO PostgreSQL … MySQL PostgreSQL
  19. 19. Абстракция базы данных 1 1PDO DbConnection “Control 1 information” “Compose and execute 1 queries”Client DbCommand DbSchema * 1Schema MySQL Schema PostgreSQL …
  20. 20. Active Record “Find self instances” 1 1Client ActiveFinder * find() ActiveRecord populateRecord() 1 “Instantiate by insert() query result” update() delete() * “Database access” 1 * DbCommand * “Database access”
  21. 21. $allUsers = User::model()->findAll();$newUser = new User();$newUser->name = ‘new user’;$newUser->save();$existingUser = User::model()->findByName(‘testuser’);$existingUser->email = ‘newemail@domain.com’;$existingUser->save();
  22. 22. События (Events) в Yii 1 Component “Raise” * EventeventHandlers sender dataraiseEvent() 1 1 PHP “Handle” Callback * Handler “List of PHP callbacks” *
  23. 23. 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; // Вывод: ‘2012-03-22 16:42’
  24. 24. Проблема множественного наследования ActiveRecord ArPosition ArFileSave custom records Bind physical file withdisplay order the db record ArPositionFile Position + File
  25. 25. Поведение (Behavior) 1 Component * Behaviorbehaviors owner__call() getOwner()attachBehavior() events() 1 1 * Event * “Raise” “Handle” data
  26. 26. 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; // Вывод: ‘2012-03-22 16:46’
  27. 27. Yii• Динамический код• Компонентная структура• Приложение = «одиночка» + «фабрика»• Отложенная загрузка и создание объектов• MVC• «PDO» и «Active Record»• События• Поведения
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×