SlideShare a Scribd company logo
1 of 35
Yii2   Что нового?




             Александр Макаров,
                    Yii core team
Немного статистики
Кто использует Yii?
*интранет
2   2
Почему?
1.Баланс
2.Стабильность
3.Гибкость
4.Документация
События 2011 — начала 2012
Что же произошло?
• 5 стабильных версий    • Окончательно вылезли
  Yii 1.1                  из «подполья»:
• Yii 1.1 Application      – Yii beer party
  Development Cookbook     – YiiTalk
• Yii for Eclipse PDT,     – YiiConf
  CodeLobster
• Yii → GitHub
За два первые дня
—348 watches
—61 forks
Сейчас
—1134 watches
—240 forks
Yii 1.1.11 будет интересным ;)
Что плохо в Yii 1.1?
• AR (finder и record не разделены, API).
• Некоторые классы в странных местах.
• Куча мелочей.




     Самое страшное —
                               BC
*
              *                 *



       *                                          
2004       2005   2006   2007       2008   2011




  Prado, с 2004 → Yii 1.0, 2008 → Yii 1.1, 2010
Команда Yii 2


—3 активных core-разработчика: qiang,
 samdark, mdomba.
—github.
—PHP 5.3.8+               —Улучшаем структуру
—Все классы в             —Убиваем лишние
 namespace (yii) и без    сущности
 префикса                 —Сохраняем плюсы
—PSR-0




                                    v2
Документация
—Larry Ullman, автор 22-х отличных IT-книг и
 серии статей про Yii: книга + участие в
 официальной документации.
—API не хуже 1.1.
—Code style.
—Есть план сделать тулзу для генерации API
 применимой к пользовательским
 приложениям… или вообще убить
 перегенерацию.
Yii2: base
— Алиасы вида           class MyComponent extends
  @yii/base/Component   yiibaseObject
                        {
— CComponent →            public $x;
  Object + Component      public function __construct($a, $b)
— SPL вместо              {
  большинства                 //…
  коллекций               }
                        }
— Убит CFormModel в
  пользу Model          $component = MyComponent::newInstance(
                          array('x'=>10),
                          'a', 'b'
                        );
Yii2: View Object
         — render(), widget(),
           beginCache() →
           viewObject
         — В View: $owner = тот, кто
           запустил метод
         — $this = View.
         — Не нужны renderer.
         — Можно использовать в
           консоли.
         — CHtml никуда не делся.
Yii2: events
$post->on('add',          • Не нужна декларация
function($event) { ...    • Синтаксис похож на
});                         jQuery
                          • Behavior-ы заменят
$post->trigger('add',       фильтры
new Event($this));

$post->off('add',
$callback);

$handlers = $post-
>getEventHandlers('add'
);
Yii2: Query object

// Query object
$query = new Query;
$query->select('id')->from('tbl_customer')->limit(10);
$command = $db->createCommand($query);
$this->assertEquals("SELECT `id` FROM `tbl_customer`
LIMIT 10", $command->sql);

// array
$command = $db->createCommand(array(
       'select' => 'name',
       'from' => 'tbl_customer',
));
Yii2: AR
$customer = Customer::find(2)   – Finder / Model
       ->active()               – Можно сделать свой
       ->one();                   finder
$customer->name = 'Qiang';
                                – ::model()
$customer->save();
                                – Автокавычки.
$customers = Customer::find()   – Method chains.
       ->order('id')
       ->asArray(true)
       ->all();
Yii2: AR
$postFinder = Post::find()       – Criteria
  ->where(array(                 – Можно мёржить finder
    'active' => true
                                 – Можно дополнять
));
                                   условия на ходу
if($isPrivate) {
  $postFinder->addWhere(array(
    'createdBy' => $userId,
  ));
}
$posts = $postFinder
  ->mergeWith($anotherFinder)
  ->all();
Yii2: AR
– tableName(),
                             class Customer extends ActiveRecord {
                                     const STATUS_ACTIVE = 1;
  relations(), scopes() =
                                     public static function tableName() {
  static.                                    return 'tbl_customer';

– Связи HAS_ONE,                     }

  HAS_MANY.                          public static function relations() {
                                             return array(
– link = FKs                                         'orders:Order[]' => array(

– via = through
                                                             'link' => array('customer_id'
                             => 'id'),

– Анонимки для
                                                     ),
                                             );
  scopes.                            }

– Токены "@." и "?.                  public static function scopes() {
                                             return array(
  Автоалиас. Своя                                    'active' => function($q) {
  таблица. Внешняя                                           return $q-
                             >andWhere('@.`status` = ' . self::STATUS_ACTIVE);
  таблица.                                           },
                                             );
                                     }
                             }
Yii2: AR
$customers =                 $customers =
Customer::find()->           Customer::find()->active()
asArray()->all();            ->all();

foreach (Customer::find()    $customers =
as $customer)                Customer::find()
                             ->where('name like :name',
$count = Customer::count()   array(
->value();                     ':name' => '%customer%‘
                             ))->order('id')->all();
TODO (если успеем)
•   HTTP (CURL) wrapper    • Виджеты на базе
•   Package manager          jQueryUI
•   Mailer                 • Коммерческая
•   Twitter Bootstrap        поддержка
•   Debug toolbar
•   Console requirements
•   More helpers
1 или 2?



Ждите, но работайте на стабильном.
Когда?
До альфы на github       •   Базу для кеша
нужно доделать, как      •   Базу для i18n
минимум, вот эти штуки   •   Controller + webapp
→
                         •   Базу для виджетов
                         •   URL manager
Что почитать?
—http://www.yiiframework.co
 m/forum/index.php/forum/4
 2-design-discussions-for-yii-
 20/
Вопросы?


yiiframework.com
 yiiframework.ru
   rmcreative.ru

More Related Content

What's hot

Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseCocoaHeads
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в DjangoMoscowDjango
 
Магия метаклассов
Магия метаклассовМагия метаклассов
Магия метаклассовAndrey Zakharevich
 
Python dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееPython dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееdelimitry
 
12 - Web-технологии. Django модели
12 - Web-технологии. Django модели12 - Web-технологии. Django модели
12 - Web-технологии. Django моделиRoman Brovko
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Entity. Anton Shubkin and Yaroslav Ponomarev
Entity. Anton Shubkin and Yaroslav PonomarevEntity. Anton Shubkin and Yaroslav Ponomarev
Entity. Anton Shubkin and Yaroslav PonomarevADCI Solutions
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка DjangoVladimir Rudnyh
 
13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данныхRoman Brovko
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORMMikhail Shamin
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf Conference
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в MagentoMagecom Ukraine
 
Enterprise Patterns in Magento
Enterprise Patterns in MagentoEnterprise Patterns in Magento
Enterprise Patterns in MagentoVrann Tulika
 

What's hot (19)

Perl 5.10 и 5.12
Perl 5.10 и 5.12Perl 5.10 и 5.12
Perl 5.10 и 5.12
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
Render API.
Render API.Render API.
Render API.
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
Магия метаклассов
Магия метаклассовМагия метаклассов
Магия метаклассов
 
Python dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееPython dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущее
 
Perl: Symbol table
Perl: Symbol tablePerl: Symbol table
Perl: Symbol table
 
12 - Web-технологии. Django модели
12 - Web-технологии. Django модели12 - Web-технологии. Django модели
12 - Web-технологии. Django модели
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Entity. Anton Shubkin and Yaroslav Ponomarev
Entity. Anton Shubkin and Yaroslav PonomarevEntity. Anton Shubkin and Yaroslav Ponomarev
Entity. Anton Shubkin and Yaroslav Ponomarev
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка Django
 
13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Javascript
JavascriptJavascript
Javascript
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORM
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в Magento
 
Enterprise Patterns in Magento
Enterprise Patterns in MagentoEnterprise Patterns in Magento
Enterprise Patterns in Magento
 

Similar to Yii 2. Что нового?

DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2Alexander Makarov
 
UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2Alexander Makarov
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2Paul Klimov
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Paul Klimov
 
Yii2
Yii2Yii2
Yii2Noveo
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Minktyomo4ka
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПKirill Chebunin
 
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)Symfoniacs
 
Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Ilyas Salikhov
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииPaul Klimov
 
Yii: миграции и инсталляции
Yii: миграции и инсталляцииYii: миграции и инсталляции
Yii: миграции и инсталляцииPaul Klimov
 
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIРазработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIIlya Chesnokov
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 

Similar to Yii 2. Что нового? (20)

DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2
 
UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2
 
Crazy owl yii1=> yii2
Crazy owl yii1=> yii2Crazy owl yii1=> yii2
Crazy owl yii1=> yii2
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2
 
Yii2
Yii2Yii2
Yii2
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 
Bytecode
BytecodeBytecode
Bytecode
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
The render api
The render apiThe render api
The render api
 
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
 
Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2
 
PHP7 - что ожидать?
PHP7 - что ожидать?PHP7 - что ожидать?
PHP7 - что ожидать?
 
Основы доменной модели
Основы доменной моделиОсновы доменной модели
Основы доменной модели
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 
Yii: миграции и инсталляции
Yii: миграции и инсталляцииYii: миграции и инсталляции
Yii: миграции и инсталляции
 
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIРазработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PI
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 

Yii 2. Что нового?

  • 1. Yii2 Что нового? Александр Макаров, Yii core team
  • 2.
  • 4.
  • 5.
  • 8.
  • 9. 2 2
  • 12. События 2011 — начала 2012
  • 13. Что же произошло? • 5 стабильных версий • Окончательно вылезли Yii 1.1 из «подполья»: • Yii 1.1 Application – Yii beer party Development Cookbook – YiiTalk • Yii for Eclipse PDT, – YiiConf CodeLobster • Yii → GitHub
  • 14.
  • 15. За два первые дня —348 watches —61 forks
  • 17. Yii 1.1.11 будет интересным ;)
  • 18. Что плохо в Yii 1.1? • AR (finder и record не разделены, API). • Некоторые классы в странных местах. • Куча мелочей. Самое страшное — BC
  • 19. * * * *  2004 2005 2006 2007 2008 2011 Prado, с 2004 → Yii 1.0, 2008 → Yii 1.1, 2010
  • 20. Команда Yii 2 —3 активных core-разработчика: qiang, samdark, mdomba. —github.
  • 21. —PHP 5.3.8+ —Улучшаем структуру —Все классы в —Убиваем лишние namespace (yii) и без сущности префикса —Сохраняем плюсы —PSR-0 v2
  • 22. Документация —Larry Ullman, автор 22-х отличных IT-книг и серии статей про Yii: книга + участие в официальной документации. —API не хуже 1.1. —Code style. —Есть план сделать тулзу для генерации API применимой к пользовательским приложениям… или вообще убить перегенерацию.
  • 23. Yii2: base — Алиасы вида class MyComponent extends @yii/base/Component yiibaseObject { — CComponent → public $x; Object + Component public function __construct($a, $b) — SPL вместо { большинства //… коллекций } } — Убит CFormModel в пользу Model $component = MyComponent::newInstance( array('x'=>10), 'a', 'b' );
  • 24. Yii2: View Object — render(), widget(), beginCache() → viewObject — В View: $owner = тот, кто запустил метод — $this = View. — Не нужны renderer. — Можно использовать в консоли. — CHtml никуда не делся.
  • 25. Yii2: events $post->on('add', • Не нужна декларация function($event) { ... • Синтаксис похож на }); jQuery • Behavior-ы заменят $post->trigger('add', фильтры new Event($this)); $post->off('add', $callback); $handlers = $post- >getEventHandlers('add' );
  • 26. Yii2: Query object // Query object $query = new Query; $query->select('id')->from('tbl_customer')->limit(10); $command = $db->createCommand($query); $this->assertEquals("SELECT `id` FROM `tbl_customer` LIMIT 10", $command->sql); // array $command = $db->createCommand(array( 'select' => 'name', 'from' => 'tbl_customer', ));
  • 27. Yii2: AR $customer = Customer::find(2) – Finder / Model ->active() – Можно сделать свой ->one(); finder $customer->name = 'Qiang'; – ::model() $customer->save(); – Автокавычки. $customers = Customer::find() – Method chains. ->order('id') ->asArray(true) ->all();
  • 28. Yii2: AR $postFinder = Post::find() – Criteria ->where(array( – Можно мёржить finder 'active' => true – Можно дополнять )); условия на ходу if($isPrivate) { $postFinder->addWhere(array( 'createdBy' => $userId, )); } $posts = $postFinder ->mergeWith($anotherFinder) ->all();
  • 29. Yii2: AR – tableName(), class Customer extends ActiveRecord { const STATUS_ACTIVE = 1; relations(), scopes() = public static function tableName() { static. return 'tbl_customer'; – Связи HAS_ONE, } HAS_MANY. public static function relations() { return array( – link = FKs 'orders:Order[]' => array( – via = through 'link' => array('customer_id' => 'id'), – Анонимки для ), ); scopes. } – Токены "@." и "?. public static function scopes() { return array( Автоалиас. Своя 'active' => function($q) { таблица. Внешняя return $q- >andWhere('@.`status` = ' . self::STATUS_ACTIVE); таблица. }, ); } }
  • 30. Yii2: AR $customers = $customers = Customer::find()-> Customer::find()->active() asArray()->all(); ->all(); foreach (Customer::find() $customers = as $customer) Customer::find() ->where('name like :name', $count = Customer::count() array( ->value(); ':name' => '%customer%‘ ))->order('id')->all();
  • 31. TODO (если успеем) • HTTP (CURL) wrapper • Виджеты на базе • Package manager jQueryUI • Mailer • Коммерческая • Twitter Bootstrap поддержка • Debug toolbar • Console requirements • More helpers
  • 32. 1 или 2? Ждите, но работайте на стабильном.
  • 33. Когда? До альфы на github • Базу для кеша нужно доделать, как • Базу для i18n минимум, вот эти штуки • Controller + webapp → • Базу для виджетов • URL manager