DevConf 2012 - Yii, его разработка и Yii2
-
Upload
alexander-makarov -
Category
Technology
-
view
17.939 -
download
5
description
Transcript of DevConf 2012 - Yii, его разработка и Yii2
![Page 1: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/1.jpg)
Yii, его разработка и Yii2
Александр Макаров,
Yii core team
![Page 2: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/2.jpg)
![Page 3: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/3.jpg)
Что такое Yii?
PHP5 MVC.
Красивый API.
DAO, AR, миграции.
Работа с формами.
Темы.
Тест-фреймворк.
Документация.
Сообщество.
Мощный кэш.
RBAC, авторизация.
Консоль.
error handler, log.
Gii.
I18n на основе CLDR.
Виджеты.
Лицензия BSD.
![Page 4: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/4.jpg)
![Page 5: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/5.jpg)
*интранет
![Page 6: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/6.jpg)
![Page 7: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/7.jpg)
2 2
![Page 8: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/8.jpg)
Почему?
![Page 9: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/9.jpg)
![Page 10: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/10.jpg)
1.Баланс 2.Стабильность 3.Гибкость 4.Документация
![Page 11: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/11.jpg)
Балансировать непросто
• «Правильная» архитектура или практический опыт?
• 20% или 80%
• Фичи или ядро?
![Page 12: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/12.jpg)
Стабильность = и зло и добро
![Page 13: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/13.jpg)
Гибкость не в ущерб API
• Меньше абстракции
• Не усложнять
• Интуитивные умолчания
• Скрыть сложность
![Page 14: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/14.jpg)
Как мы документируем
—Пишем код — обновляем документацию.
—phpdoc.
—Примеры.
—Применимо для любого проекта.
![Page 15: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/15.jpg)
События 2011 — начала 2012
![Page 16: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/16.jpg)
Что же произошло?
• 5 стабильных версий Yii 1.1
• Yii 1.1 Application Development Cookbook
• Yii for Eclipse PDT, CodeLobster
• Yii → GitHub
• Окончательно вылезли из «подполья»:
– Yii beer party
– YiiTalk
– YiiConf
![Page 17: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/17.jpg)
Уроки
• Не обещать золотых гор, реализовывать обещанное
• Сообщество не любит ждать… но может
• Получить первых крупных пользователей сложнее всего
• Мероприятия очень важны
• Книги писать финансово невыгодно, но интересно и полезно
![Page 18: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/18.jpg)
![Page 19: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/19.jpg)
За два первые дня
—348 watches
—61 forks
![Page 20: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/20.jpg)
Сейчас
—1337 watches
—273 forks
![Page 21: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/21.jpg)
GitHub рулит, но…
• А как же качество реквестов?
• Правильный процесс.
• Работа с сообществом.
• Немного юмора.
• Позитивный настрой.
![Page 22: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/22.jpg)
Команда
—3 активных core-разработчика: qiang, samdark, mdomba.
—github.
![Page 23: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/23.jpg)
Что плохо в Yii 1.1?
• AR (finder и record не разделены, API).
• Некоторые классы в странных местах.
• Но это всё мелочи…
BC Самое страшное —
![Page 24: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/24.jpg)
Prado, с 2004 → Yii 1.0, 2008 → Yii 1.1, 2010
2004 2005 2007 2008
* * *
*
2011 2006
![Page 25: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/25.jpg)
Yii 2?
![Page 26: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/26.jpg)
—PHP 5.3.8+
—Все классы в namespace (\yii) и без префикса
—PSR-0
—Улучшаем структуру
—Убиваем лишние сущности
—Сохраняем плюсы
v2
![Page 27: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/27.jpg)
Документация
—Larry Ullman, автор 22-х отличных IT-книг и серии статей про Yii: книга + участие в официальной документации.
—API не хуже 1.1.
—Code style.
—Генератор документации.
![Page 28: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/28.jpg)
Yii2: base
— Алиасы вида @yii/base/Component
— CComponent → Object + Component
— SPL вместо большинства коллекций
— Убит CFormModel в пользу Model
class MyComponent extends \yii\base\Object
{
public $x;
public function __construct($a, $b)
{
//…
}
}
$component = MyComponent::newInstance(
array('x'=>10),
'a', 'b'
);
![Page 29: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/29.jpg)
Yii2: View Object
— render(), widget(), beginCache() → viewObject
— В View: $owner = тот, кто запустил метод
— $this = View.
— Не нужны renderer.
— Можно использовать в консоли.
— CHtml никуда не делся.
![Page 30: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/30.jpg)
Yii2: events
$post->on('add', function($event) { ... }); $post->trigger('add', new Event($this)); $post->off('add', $callback); $handlers = $post->getEventHandlers('add');
• Не нужна декларация • Синтаксис похож на
jQuery • Behavior-ы заменят
фильтры
![Page 31: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/31.jpg)
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',
));
![Page 32: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/32.jpg)
Yii2: AR
$customer = Customer::find(2)
->active()
->one();
$customer->name = 'Qiang';
$customer->save();
$customers = Customer::find()
->order('id')
->asArray(true)
->all();
– Finder / Model
– Можно сделать свой finder
– ::model()
– Автокавычки.
– Method chains.
– Dirty attributes.
![Page 33: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/33.jpg)
Yii2: AR
$postFinder = Post::find()
->where(array(
'active' => true
));
if($isPrivate) {
$postFinder->addWhere(array(
'createdBy' => $userId,
));
}
$posts = $postFinder
->mergeWith($anotherFinder)
->all();
– Criteria
– Можно мёржить finder
– Можно дополнять условия на ходу
![Page 34: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/34.jpg)
Yii2: AR
– tableName(), relations(), scopes() = static.
– Связи HAS_ONE, HAS_MANY.
– link = FKs
– via = through
– Анонимки для scopes.
– Токены "@." и "?. Автоалиас. Своя таблица. Внешняя таблица.
class Customer extends ActiveRecord {
const STATUS_ACTIVE = 1;
public static function tableName() {
return 'tbl_customer';
}
public static function relations() {
return array(
'orders:Order[]' => array(
'link' => array('customer_id' => 'id'),
),
);
}
public static function scopes() {
return array(
'active' => function($q) {
return $q->andWhere('@.`status` = ' . self::STATUS_ACTIVE);
},
);
}
}
![Page 35: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/35.jpg)
Yii2: AR
$customers = Customer::find()-> asArray()->all();
foreach (Customer::find() as $customer)
$count = Customer::count()
->value();
$customers = Customer::find()->active()
->all();
$customers = Customer::find()
->where('name like :name', array(
':name' => '%customer%‘
))->order('id')->all();
![Page 36: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/36.jpg)
TODO (если успеем)
• HTTP (CURL) wrapper
• Package manager
• Mailer
• Twitter Bootstrap
• Debug toolbar
• Console requirements
• More helpers
• Виджеты на базе jQueryUI
• Коммерческая поддержка (сам Yii всегда будет открыт и бесплатен)
![Page 37: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/37.jpg)
1 или 2?
Ждите, но работайте на стабильном.
![Page 38: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/38.jpg)
Когда?
До альфы на github (в которой будет не всё запланированное) нужно доделать, как минимум, вот эти штуки →
• Базу для i18n
• Controller + webapp
• Базу для виджетов
• URL manager
![Page 39: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/39.jpg)
Что почитать про Yii1?
—Официальный гайд
—Learning Yii, Larry Ulman
—Туториал по созданию блога
—Yii 1.1 Application Development Cookbook
—Блоги
—Хабр
![Page 40: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/40.jpg)
Что почитать про Yii2?
—http://www.yiiframework.com/forum/index.php/forum/42-design-discussions-for-yii-20/
![Page 41: DevConf 2012 - Yii, его разработка и Yii2](https://reader030.fdocument.pub/reader030/viewer/2022020714/5484c4bfb4af9f870d8b4c80/html5/thumbnails/41.jpg)
Вопросы?
yiiframework.com
yiiframework.ru
rmcreative.ru