DevConf 2012 - Yii, его разработка и Yii2

Alexander Makarov
Alexander MakarovEngineer at Yii core team
Yii, его разработка и
          Yii2



            Александр Макаров,
                   Yii core team
DevConf 2012 - Yii, его разработка и Yii2
Что такое Yii?
PHP5 MVC.            Мощный кэш.
Красивый API.        RBAC, авторизация.
DAO, AR, миграции.   Консоль.
Работа с формами.    error handler, log.
Темы.
                      Gii.
Тест-фреймворк.
                      I18n на основе CLDR.
Документация.
                      Виджеты.
Сообщество.
                      Лицензия BSD.
DevConf 2012 - Yii, его разработка и Yii2
*интранет
DevConf 2012 - Yii, его разработка и Yii2
2   2
Почему?
DevConf 2012 - Yii, его разработка и Yii2
1.Баланс
2.Стабильность
3.Гибкость
4.Документация
Балансировать непросто
• «Правильная» архитектура или
  практический опыт?
• 20% или 80%
• Фичи или ядро?
Стабильность = и зло и добро
Гибкость не в ущерб API
•   Меньше абстракции
•   Не усложнять
•   Интуитивные умолчания
•   Скрыть сложность
Как мы документируем
—Пишем код — обновляем документацию.
—phpdoc.
—Примеры.
—Применимо для любого проекта.
События 2011 — начала 2012
Что же произошло?
• 5 стабильных версий    • Окончательно вылезли
  Yii 1.1                  из «подполья»:
• Yii 1.1 Application      – Yii beer party
  Development Cookbook     – YiiTalk
• Yii for Eclipse PDT,     – YiiConf
  CodeLobster
• Yii → GitHub
Уроки
• Не обещать золотых    • Мероприятия очень
  гор, реализовывать      важны
  обещанное             • Книги писать
• Сообщество не любит     финансово невыгодно,
  ждать… но может         но интересно и
• Получить первых         полезно
  крупных
  пользователей
  сложнее всего
DevConf 2012 - Yii, его разработка и Yii2
За два первые дня
—348 watches
—61 forks
Сейчас
—1337 watches
—273 forks
GitHub рулит, но…
•   А как же качество реквестов?
•   Правильный процесс.
•   Работа с сообществом.
•   Немного юмора.
•   Позитивный настрой.
Команда


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




                                    v2
Документация
—Larry Ullman, автор 22-х отличных IT-книг и
 серии статей про Yii: книга + участие в
 официальной документации.
—API не хуже 1.1.
—Code style.
—Генератор документации.
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')            – Dirty attributes.
       ->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        поддержка (сам Yii
                             всегда будет открыт и
•   Debug toolbar            бесплатен)
•   Console requirements
•   More helpers
1 или 2?



Ждите, но работайте на стабильном.
Когда?
До альфы на github (в    •   Базу для i18n
которой будет не всё     •   Controller + webapp
запланированное)         •   Базу для виджетов
нужно доделать, как
минимум, вот эти штуки   •   URL manager
→
Что почитать про Yii1?
—Официальный гайд
—Learning Yii, Larry Ulman
—Туториал по созданию
 блога
—Yii 1.1 Application
 Development Cookbook
—Блоги
—Хабр
Что почитать про Yii2?
—http://www.yiiframework.co
 m/forum/index.php/forum/4
 2-design-discussions-for-yii-
 20/
Вопросы?


yiiframework.com
 yiiframework.ru
   rmcreative.ru
1 of 41

More Related Content

What's hot(20)

SPA инструментыSPA инструменты
SPA инструменты
Roman Dvornov1.8K views
Yii developmentYii development
Yii development
MageCloud744 views
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
Anatoly Sharifulin1.7K views
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
Roman Dvornov2.6K views
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
2ГИС Технологии2.7K views
Render API.Render API.
Render API.
DrupalForumZP20121.2K views

Similar to DevConf 2012 - Yii, его разработка и Yii2(20)

DevConf 2012 - Yii, его разработка и Yii2

  • 1. Yii, его разработка и Yii2 Александр Макаров, Yii core team
  • 3. Что такое Yii? PHP5 MVC. Мощный кэш. Красивый API. RBAC, авторизация. DAO, AR, миграции. Консоль. Работа с формами. error handler, log. Темы. Gii. Тест-фреймворк. I18n на основе CLDR. Документация. Виджеты. Сообщество. Лицензия BSD.
  • 7. 2 2
  • 11. Балансировать непросто • «Правильная» архитектура или практический опыт? • 20% или 80% • Фичи или ядро?
  • 12. Стабильность = и зло и добро
  • 13. Гибкость не в ущерб API • Меньше абстракции • Не усложнять • Интуитивные умолчания • Скрыть сложность
  • 14. Как мы документируем —Пишем код — обновляем документацию. —phpdoc. —Примеры. —Применимо для любого проекта.
  • 15. События 2011 — начала 2012
  • 16. Что же произошло? • 5 стабильных версий • Окончательно вылезли Yii 1.1 из «подполья»: • Yii 1.1 Application – Yii beer party Development Cookbook – YiiTalk • Yii for Eclipse PDT, – YiiConf CodeLobster • Yii → GitHub
  • 17. Уроки • Не обещать золотых • Мероприятия очень гор, реализовывать важны обещанное • Книги писать • Сообщество не любит финансово невыгодно, ждать… но может но интересно и • Получить первых полезно крупных пользователей сложнее всего
  • 19. За два первые дня —348 watches —61 forks
  • 21. GitHub рулит, но… • А как же качество реквестов? • Правильный процесс. • Работа с сообществом. • Немного юмора. • Позитивный настрой.
  • 23. Что плохо в Yii 1.1? • AR (finder и record не разделены, API). • Некоторые классы в странных местах. • Но это всё мелочи… Самое страшное — BC
  • 24. * * * *  2004 2005 2006 2007 2008 2011 Prado, с 2004 → Yii 1.0, 2008 → Yii 1.1, 2010
  • 26. —PHP 5.3.8+ —Улучшаем структуру —Все классы в —Убиваем лишние namespace (yii) и без сущности префикса —Сохраняем плюсы —PSR-0 v2
  • 27. Документация —Larry Ullman, автор 22-х отличных IT-книг и серии статей про Yii: книга + участие в официальной документации. —API не хуже 1.1. —Code style. —Генератор документации.
  • 28. 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' );
  • 29. Yii2: View Object — render(), widget(), beginCache() → viewObject — В View: $owner = тот, кто запустил метод — $this = View. — Не нужны renderer. — Можно использовать в консоли. — CHtml никуда не делся.
  • 30. Yii2: events $post->on('add', • Не нужна декларация function($event) { ... • Синтаксис похож на }); jQuery • Behavior-ы заменят $post->trigger('add', фильтры new Event($this)); $post->off('add', $callback); $handlers = $post- >getEventHandlers('add' );
  • 31. 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', ));
  • 32. Yii2: AR $customer = Customer::find(2) – Finder / Model ->active() – Можно сделать свой ->one(); finder $customer->name = 'Qiang'; – ::model() $customer->save(); – Автокавычки. $customers = Customer::find() – Method chains. ->order('id') – Dirty attributes. ->asArray(true) ->all();
  • 33. Yii2: AR $postFinder = Post::find() – Criteria ->where(array( – Можно мёржить finder 'active' => true – Можно дополнять )); условия на ходу if($isPrivate) { $postFinder->addWhere(array( 'createdBy' => $userId, )); } $posts = $postFinder ->mergeWith($anotherFinder) ->all();
  • 34. 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); таблица. }, ); } }
  • 35. 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();
  • 36. TODO (если успеем) • HTTP (CURL) wrapper • Виджеты на базе • Package manager jQueryUI • Mailer • Коммерческая • Twitter Bootstrap поддержка (сам Yii всегда будет открыт и • Debug toolbar бесплатен) • Console requirements • More helpers
  • 37. 1 или 2? Ждите, но работайте на стабильном.
  • 38. Когда? До альфы на github (в • Базу для i18n которой будет не всё • Controller + webapp запланированное) • Базу для виджетов нужно доделать, как минимум, вот эти штуки • URL manager →
  • 39. Что почитать про Yii1? —Официальный гайд —Learning Yii, Larry Ulman —Туториал по созданию блога —Yii 1.1 Application Development Cookbook —Блоги —Хабр
  • 40. Что почитать про Yii2? —http://www.yiiframework.co m/forum/index.php/forum/4 2-design-discussions-for-yii- 20/