SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
v2


Александр Макаров
       Yii core team
            Stay.com
Yii?
 PHP5 MVC.              Мощный кеш.
 Приятный API.
                         RBAC, авторизация.
 DAO, AR, миграции.
 Построитель форм.      Консоль.
 Темы.                  Обработка ошибок,
 Тесты.                  лог.
 Документирован.        Gii.
 Сообщество.
 BSD.                   CLDR, I18n.
                         Виджеты.
*intranet
Что важно в фреймворке
– Легко изучать.
– Легко отлаживать и исправлять ошибки.
– Не должен мешать вашему коду или любому
  нормальному стороннему коду.
– Отличное сообщество.
– Обратно совместимый и стабильный.
– Не мешает расширять и настраивать.
– Приятен ;)
*
              *                 *



       *                                          
2004       2005   2006   2007       2008   2011




  Prado, с 2004 → Yii 1.0, 2008 → Yii 1.1, 2010
Что? Где? Когда?
– Он жив 
– Он развивается.
– Он уже не так сильно далёк от публичной
  альфы… но всё ещё есть над чем поработать,
  поэтому пока никаких дат и прогнозов.

https://github.com/yiisoft/yii2/wiki/Yii2-Development-
Roadmap
—Последний PHP 5.3.x+   —Лучше структура
—Namespace              —Меньше лишних
—PSR-0                   классов
                        —Хорошее осталось




                                 v2
ПРОИЗВОДИТЕЛЬНОСТЬ
Общая
– Лучше 1.1.
– "hello world" для веб в два раза быстрее 1.1
  без APC и на 10—20% быстрее с APC (новый
  PSR-0 загрузчик классов, namespace, меньше
  классов).
AR
– Лучше 1.1.
– AR2 кушает меньше памяти и работает
  быстрее. В режиме asArray значительно.
СТРУКТУРА
Базовые классы
• Object
  – Геттеры/сеттеры (~1.1).
• Component
  – События.
  – Behavior (~1.1).
События
class MyComponent extends yiibaseComponent
{
          public function test($name)
          {
                    $this->trigger('test', new yiibaseEvent($this, $name));
          }

          public function hello($name)
          {
                    echo 'Hello, '.$name.'!';
          }
}

$component = new MyComponent();
$component->on('test', function($event) {
          echo $event->sender->hello($event->data);
});
$component->test('Alex');

// out:

Hello, Alex!
Исключения
ОШИБКИ, ОТЛАДКА, ЛОГ
Ошибки
• Нефатальные ошибки конвертируются в
  исключения.
• Фатальные ошибки ловятся и показываются
  красиво.
• Фатальные ошибки пишутся в лог в
  подавляющем большинстве случаев.
Перехват фатальных ошибок в PHP
– register_shutdown_function() /
  error_get_last().
– ini_set('display_errors', 0);
– Стек можно получить из XDebug.
– Ошибки нехватки памяти. Резерв.
Особенности конвертирования
       ошибок в исключения
• set_error_handler, кидаем исключение.
• set_exception_handler, обрабатываем.
• Исключения в __toString().
Отладка и лог
• Ошибки пишутся в лог всегда.
• В планах полноценная отладочная
  панелька.
РАСШИРЕНИЯ
Зависимости, сайт
– Composer.
– Официальные расширения.
– Рекомендуемые расширения.
– github/bitbucket.

– Несколько официальных расширений будут
  доступны сразу (Smarty, Twig).
МОДЕЛЬ
Модель
– Больше нет модели формы.
– ArrayAccess.
– Валидация.
– Массовое присваивание.
Модель
class LoginForm extends yiibaseModel
{
     public $username;
     public $password;
}
Массовое присваивание
AR
class User extends yiidbActiveRecord
{
       public function table()
       {
               return 'tbl_user';
       }

       public function scenarios()
       {
              return array(
                      'login' => array('username', 'password'),
                      'register' => array('username', 'email',
'password'),
              );
       }
}
Валидация
function rules() {
 return array(
  // rule applied when corresponding field is "safe"
  array('username', 'length', 'min' => 2),
  array('first_name', 'length', 'min' => 2),
  array('password', 'required'),

  // rule applied when scenario is "signup" no matter if field is "safe" or not
  array('hashcode', 'check', 'on' => 'signup'),
 );
}

function scenarios() {
 return array(
  // on signup allow mass assignment of username
  'signup' => array('username', 'password'),
  'update' => array('username', 'first_name'),
 );
}
РАБОТА С БД
Command
Try {
     $command = $db->createCommand($sql)-
>queryAll();
}
catch(yiidbException) {
  //
}
Query
$query = new Query();
$result = $query->select('*')-
>from('post')->where('id = :id',
array(':id' => 1))->createCommand()-
>query();
AR
$customers = Customer::find()
    ->where(array('status' => 1))
    ->orderBy('age')
    ->all();

$customer = Customer::find(10);

$customer = Customer::find(array('age' =>
30, 'status' => 1));
AR relations
class Customer extends yiidbActiveRecord
{
     public function getOrders()
     {
          return $this->hasMany('Order',
array('customer_id' => 'id'));
     }
}

$customer = Customer::find($id);
$orders = $customer->orders; // $orders is an
array of Order objects
AR link/unlink
$customer = Customer::find(1);
$order = new Order;
$order->subtotal = 100;
$customer->link('orders', $order);
AR scope
class Customer extends yiidbActiveRecord
{
       // ...

      /**
        * @param ActiveQuery $query
        */
      public function active($query)
      {
              $query->andWhere('status = 1');
      }
}

$customers = Customer::find()->active()->all();
AR scope
class Customer extends yiidbActiveRecord
{
       // ...

          /**
           * @param ActiveQuery $query
           * @param integer $age
           */
          public function olderThan($query, $age = 30)
          {
                 $query->andWhere('age > :age', array(':age' =>
$age));
          }
}

$customers = Customer::find()->olderThan(50)->all();
noSQL?
• Всякие варианты кеша.
• Не кэш:
  – Пробуем написать обёртку для Redis.
  – Планируем также пощупать Mongo.
WEB, КОНСОЛЬ, ШАБЛОНЫ
Консольное приложение
– Консольное и веб очень похожи.
– Консольная команда = контроллер.
– Консолька будет цветастая.
– Документация для help из phpdoc.
yiic app
– Как минимум два приложения
  • Простое
  • Посложнее
– Можно сделать свои шаблоны.
1 или 2?



      Работайте на стабильном.
1.1 поддерживается как минимум до
         31 декабря, 2015.
Вопросы?
– http://yiiframework.c
  om/
– https://github.com/yii
  soft/yii2/wiki/Yii2-
  Development-
  Roadmap
– sam@rmcreative.ru
– @sam_dark

Más contenido relacionado

La actualidad más candente

Ф'Yii'лософия
Ф'Yii'лософияФ'Yii'лософия
Ф'Yii'лософияPaul Klimov
 
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Ontico
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаprivate_face
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Pavel Tsukanov
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
Yii development
Yii developmentYii development
Yii developmentMageCloud
 
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...zfconfua
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2Paul Klimov
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»Roman Dvornov
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоStanfy
 
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма..."Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...Yandex
 
Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»Yandex
 
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)Ontico
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseCocoaHeads
 
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Yandex
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииPaul Klimov
 
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Paul Klimov
 

La actualidad más candente (20)

Ф'Yii'лософия
Ф'Yii'лософияФ'Yii'лософия
Ф'Yii'лософия
 
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кода
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
 
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Yii development
Yii developmentYii development
Yii development
 
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма..."Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
 
Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»
 
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
 
Render API.
Render API.Render API.
Render API.
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2
 

Similar a UWDC 2013, Yii2

Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПKirill Chebunin
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс СерверPVasili
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Yii2
Yii2Yii2
Yii2Noveo
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentAnton Kirillov
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Yandex
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 

Similar a UWDC 2013, Yii2 (20)

Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
php frameworks
php frameworksphp frameworks
php frameworks
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Bytecode
BytecodeBytecode
Bytecode
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс Сервер
 
Crazy owl yii1=> yii2
Crazy owl yii1=> yii2Crazy owl yii1=> yii2
Crazy owl yii1=> yii2
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Zend framework 2
Zend framework 2Zend framework 2
Zend framework 2
 
Yii2
Yii2Yii2
Yii2
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application Development
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
Yserver
YserverYserver
Yserver
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 

Más de Alexander Makarov

Yii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading toYii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading toAlexander Makarov
 
YiiConf 2012 - Alexander Makarov - Yii2, what's new
YiiConf 2012 - Alexander Makarov - Yii2, what's newYiiConf 2012 - Alexander Makarov - Yii2, what's new
YiiConf 2012 - Alexander Makarov - Yii2, what's newAlexander Makarov
 
UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2Alexander Makarov
 
UWDC'12, Александр Макаров, О командной разработке и фреймворках
UWDC'12, Александр Макаров, О командной разработке и фреймворкахUWDC'12, Александр Макаров, О командной разработке и фреймворках
UWDC'12, Александр Макаров, О командной разработке и фреймворкахAlexander Makarov
 
Devconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developedDevconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developedAlexander Makarov
 
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiDevconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiAlexander Makarov
 
Выбираем PHP-фреймворк. Особенности разработки с фреймворками
Выбираем PHP-фреймворк. Особенности разработки с фреймворкамиВыбираем PHP-фреймворк. Особенности разработки с фреймворками
Выбираем PHP-фреймворк. Особенности разработки с фреймворкамиAlexander Makarov
 

Más de Alexander Makarov (9)

Yii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading toYii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading to
 
YiiConf 2012 - Alexander Makarov - Yii2, what's new
YiiConf 2012 - Alexander Makarov - Yii2, what's newYiiConf 2012 - Alexander Makarov - Yii2, what's new
YiiConf 2012 - Alexander Makarov - Yii2, what's new
 
UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2
 
UWDC'12, Александр Макаров, О командной разработке и фреймворках
UWDC'12, Александр Макаров, О командной разработке и фреймворкахUWDC'12, Александр Макаров, О командной разработке и фреймворках
UWDC'12, Александр Макаров, О командной разработке и фреймворках
 
Devconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developedDevconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developed
 
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiDevconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
 
Как разраба
Как разрабаКак разраба
Как разраба
 
Выбираем PHP-фреймворк. Особенности разработки с фреймворками
Выбираем PHP-фреймворк. Особенности разработки с фреймворкамиВыбираем PHP-фреймворк. Особенности разработки с фреймворками
Выбираем PHP-фреймворк. Особенности разработки с фреймворками
 
Yii rit 2010
Yii rit 2010Yii rit 2010
Yii rit 2010
 

UWDC 2013, Yii2

  • 1. v2 Александр Макаров Yii core team Stay.com
  • 2. Yii?  PHP5 MVC. Мощный кеш.  Приятный API. RBAC, авторизация.  DAO, AR, миграции.  Построитель форм. Консоль.  Темы. Обработка ошибок,  Тесты. лог.  Документирован. Gii.  Сообщество.  BSD. CLDR, I18n. Виджеты.
  • 4. Что важно в фреймворке – Легко изучать. – Легко отлаживать и исправлять ошибки. – Не должен мешать вашему коду или любому нормальному стороннему коду. – Отличное сообщество. – Обратно совместимый и стабильный. – Не мешает расширять и настраивать. – Приятен ;)
  • 5. * * * *  2004 2005 2006 2007 2008 2011 Prado, с 2004 → Yii 1.0, 2008 → Yii 1.1, 2010
  • 6. Что? Где? Когда? – Он жив  – Он развивается. – Он уже не так сильно далёк от публичной альфы… но всё ещё есть над чем поработать, поэтому пока никаких дат и прогнозов. https://github.com/yiisoft/yii2/wiki/Yii2-Development- Roadmap
  • 7. —Последний PHP 5.3.x+ —Лучше структура —Namespace —Меньше лишних —PSR-0 классов —Хорошее осталось v2
  • 9. Общая – Лучше 1.1. – "hello world" для веб в два раза быстрее 1.1 без APC и на 10—20% быстрее с APC (новый PSR-0 загрузчик классов, namespace, меньше классов).
  • 10. AR – Лучше 1.1. – AR2 кушает меньше памяти и работает быстрее. В режиме asArray значительно.
  • 12. Базовые классы • Object – Геттеры/сеттеры (~1.1). • Component – События. – Behavior (~1.1).
  • 13. События class MyComponent extends yiibaseComponent { public function test($name) { $this->trigger('test', new yiibaseEvent($this, $name)); } public function hello($name) { echo 'Hello, '.$name.'!'; } } $component = new MyComponent(); $component->on('test', function($event) { echo $event->sender->hello($event->data); }); $component->test('Alex'); // out: Hello, Alex!
  • 16. Ошибки • Нефатальные ошибки конвертируются в исключения. • Фатальные ошибки ловятся и показываются красиво. • Фатальные ошибки пишутся в лог в подавляющем большинстве случаев.
  • 17.
  • 18. Перехват фатальных ошибок в PHP – register_shutdown_function() / error_get_last(). – ini_set('display_errors', 0); – Стек можно получить из XDebug. – Ошибки нехватки памяти. Резерв.
  • 19. Особенности конвертирования ошибок в исключения • set_error_handler, кидаем исключение. • set_exception_handler, обрабатываем. • Исключения в __toString().
  • 20. Отладка и лог • Ошибки пишутся в лог всегда. • В планах полноценная отладочная панелька.
  • 22. Зависимости, сайт – Composer. – Официальные расширения. – Рекомендуемые расширения. – github/bitbucket. – Несколько официальных расширений будут доступны сразу (Smarty, Twig).
  • 24. Модель – Больше нет модели формы. – ArrayAccess. – Валидация. – Массовое присваивание.
  • 25. Модель class LoginForm extends yiibaseModel { public $username; public $password; }
  • 27. AR class User extends yiidbActiveRecord { public function table() { return 'tbl_user'; } public function scenarios() { return array( 'login' => array('username', 'password'), 'register' => array('username', 'email', 'password'), ); } }
  • 28. Валидация function rules() { return array( // rule applied when corresponding field is "safe" array('username', 'length', 'min' => 2), array('first_name', 'length', 'min' => 2), array('password', 'required'), // rule applied when scenario is "signup" no matter if field is "safe" or not array('hashcode', 'check', 'on' => 'signup'), ); } function scenarios() { return array( // on signup allow mass assignment of username 'signup' => array('username', 'password'), 'update' => array('username', 'first_name'), ); }
  • 30. Command Try { $command = $db->createCommand($sql)- >queryAll(); } catch(yiidbException) { // }
  • 31. Query $query = new Query(); $result = $query->select('*')- >from('post')->where('id = :id', array(':id' => 1))->createCommand()- >query();
  • 32. AR $customers = Customer::find() ->where(array('status' => 1)) ->orderBy('age') ->all(); $customer = Customer::find(10); $customer = Customer::find(array('age' => 30, 'status' => 1));
  • 33. AR relations class Customer extends yiidbActiveRecord { public function getOrders() { return $this->hasMany('Order', array('customer_id' => 'id')); } } $customer = Customer::find($id); $orders = $customer->orders; // $orders is an array of Order objects
  • 34. AR link/unlink $customer = Customer::find(1); $order = new Order; $order->subtotal = 100; $customer->link('orders', $order);
  • 35. AR scope class Customer extends yiidbActiveRecord { // ... /** * @param ActiveQuery $query */ public function active($query) { $query->andWhere('status = 1'); } } $customers = Customer::find()->active()->all();
  • 36. AR scope class Customer extends yiidbActiveRecord { // ... /** * @param ActiveQuery $query * @param integer $age */ public function olderThan($query, $age = 30) { $query->andWhere('age > :age', array(':age' => $age)); } } $customers = Customer::find()->olderThan(50)->all();
  • 37. noSQL? • Всякие варианты кеша. • Не кэш: – Пробуем написать обёртку для Redis. – Планируем также пощупать Mongo.
  • 39. Консольное приложение – Консольное и веб очень похожи. – Консольная команда = контроллер. – Консолька будет цветастая. – Документация для help из phpdoc.
  • 40. yiic app – Как минимум два приложения • Простое • Посложнее – Можно сделать свои шаблоны.
  • 41. 1 или 2? Работайте на стабильном. 1.1 поддерживается как минимум до 31 декабря, 2015.
  • 42. Вопросы? – http://yiiframework.c om/ – https://github.com/yii soft/yii2/wiki/Yii2- Development- Roadmap – sam@rmcreative.ru – @sam_dark