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




             Александр Макаров,
                    Yii core team
YiiConf 2012 - Alexander Makarov - Yii2, что нового
Немного статистики
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что нового
Кто использует Yii?
*интранет
YiiConf 2012 - Alexander Makarov - Yii2, что нового
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
YiiConf 2012 - Alexander Makarov - Yii2, что нового
За два первые дня
—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

PPT
Yii development
PDF
UWDC 2013, Yii2
PPT
Yserver
PPT
Memory managment in i os (1)
PDF
DevConf. Дмитрий Сошников - ECMAScript 6
PPTX
Реализация шаблонов корпоративных приложений в Magento
PPTX
I tmozg js_school_jquery
PDF
Decorators' recipes
Yii development
UWDC 2013, Yii2
Yserver
Memory managment in i os (1)
DevConf. Дмитрий Сошников - ECMAScript 6
Реализация шаблонов корпоративных приложений в Magento
I tmozg js_school_jquery
Decorators' recipes

What's hot (19)

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

Similar to YiiConf 2012 - Alexander Makarov - Yii2, что нового (20)

PDF
DevConf 2012 - Yii, его разработка и Yii2
PDF
UWDC'12, Александр Макаров, Yii, его разработка и Yii2
PDF
Crazy owl yii1=> yii2
PPT
Общая архитектура Yii2
PPTX
Yii2
PDF
Ф'Yii'лософия
ODP
александр макаров Yii Rit 2010
PDF
UWDC 2013, Как мы используем Yii
PDF
Примеры решения типичных задач за рамками ядра Yii2
PPT
Yii rit 2010
PDF
Чуть сложнее чем Singleton: аннотации, IOC, АОП
PDF
Yii2 - от Alpha до GA (release)
PDF
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
ODP
Ice Php Framework Preview Release
PDF
CodeFest 2011. Макаров А. — Как разрабатывается Yii
PDF
Как разраба
PDF
Продвинутое использование ActiveRecord в Yii2
PDF
Современные платформы (фреймворки) разработки веб- приложений на PHP
PDF
Zend framework 2
DevConf 2012 - Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2
Crazy owl yii1=> yii2
Общая архитектура Yii2
Yii2
Ф'Yii'лософия
александр макаров Yii Rit 2010
UWDC 2013, Как мы используем Yii
Примеры решения типичных задач за рамками ядра Yii2
Yii rit 2010
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Yii2 - от Alpha до GA (release)
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Ice Php Framework Preview Release
CodeFest 2011. Макаров А. — Как разрабатывается Yii
Как разраба
Продвинутое использование ActiveRecord в Yii2
Современные платформы (фреймворки) разработки веб- приложений на PHP
Zend framework 2
Ad

YiiConf 2012 - Alexander Makarov - Yii2, что нового

  • 1. Yii2 Что нового? Александр Макаров, Yii core team
  • 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
  • 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