SlideShare a Scribd company logo
1 of 41
Download to read offline
Yii, его разработка и
          Yii2



            Александр Макаров,
                   Yii core team
Что такое Yii?
PHP5 MVC.            Мощный кэш.
Красивый API.        RBAC, авторизация.
DAO, AR, миграции.   Консоль.
Работа с формами.    error handler, log.
Темы.
                      Gii.
Тест-фреймворк.
                      I18n на основе CLDR.
Документация.
                      Виджеты.
Сообщество.
                      Лицензия BSD.
*интранет
2   2
Почему?
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
Уроки
• Не обещать золотых    • Мероприятия очень
  гор, реализовывать      важны
  обещанное             • Книги писать
• Сообщество не любит     финансово невыгодно,
  ждать… но может         но интересно и
• Получить первых         полезно
  крупных
  пользователей
  сложнее всего
За два первые дня
—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

More Related Content

What's hot

Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаprivate_face
 
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Ontico
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Pavel Tsukanov
 
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
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииPaul Klimov
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseCocoaHeads
 
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Paul Klimov
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Paul Klimov
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"Roman Dvornov
 

What's hot (20)

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

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

UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2UWDC'12, Александр Макаров, Yii, его разработка и Yii2
UWDC'12, Александр Макаров, Yii, его разработка и Yii2Alexander Makarov
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПKirill Chebunin
 
Enterprise Patterns in Magento
Enterprise Patterns in MagentoEnterprise Patterns in Magento
Enterprise Patterns in MagentoVrann Tulika
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Minktyomo4ka
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Yii2
Yii2Yii2
Yii2Noveo
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в DjangoMoscowDjango
 
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
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agencyit-people
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETDev2Dev
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Ilyas Salikhov
 
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)Symfoniacs
 

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

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
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Enterprise Patterns in Magento
Enterprise Patterns in MagentoEnterprise Patterns in Magento
Enterprise Patterns in Magento
 
Bytecode
BytecodeBytecode
Bytecode
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Yii2
Yii2Yii2
Yii2
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
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
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Основы доменной модели
Основы доменной моделиОсновы доменной модели
Основы доменной модели
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
 
Decorators' recipes
Decorators' recipesDecorators' recipes
Decorators' recipes
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2
 
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
 
The render api
The render apiThe render api
The render api
 

More from 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, Александр Макаров, О командной разработке и фреймворках
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
 

More from Alexander Makarov (8)

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, Александр Макаров, О командной разработке и фреймворках
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
 

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

  • 1. Yii, его разработка и Yii2 Александр Макаров, Yii core team
  • 2.
  • 3. Что такое Yii? PHP5 MVC. Мощный кэш. Красивый API. RBAC, авторизация. DAO, AR, миграции. Консоль. Работа с формами. error handler, log. Темы. Gii. Тест-фреймворк. I18n на основе CLDR. Документация. Виджеты. Сообщество. Лицензия BSD.
  • 4.
  • 6.
  • 7. 2 2
  • 9.
  • 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. Уроки • Не обещать золотых • Мероприятия очень гор, реализовывать важны обещанное • Книги писать • Сообщество не любит финансово невыгодно, ждать… но может но интересно и • Получить первых полезно крупных пользователей сложнее всего
  • 18.
  • 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/