4. Что важно в фреймворке
– Легко изучать.
– Легко отлаживать и исправлять ошибки.
– Не должен мешать вашему коду или любому
нормальному стороннему коду.
– Отличное сообщество.
– Обратно совместимый и стабильный.
– Не мешает расширять и настраивать.
– Приятен ;)
6. Что? Где? Когда?
– Он жив
– Он развивается.
– Он уже не так сильно далёк от публичной
альфы… но всё ещё есть над чем поработать,
поэтому пока никаких дат и прогнозов.
https://github.com/yiisoft/yii2/wiki/Yii2-Development-
Roadmap
7. —Последний PHP 5.3.x+ —Лучше структура
—Namespace —Меньше лишних
—PSR-0 классов
—Хорошее осталось
v2
9. Общая
– Лучше 1.1.
– "hello world" для веб в два раза быстрее 1.1
без APC и на 10—20% быстрее с APC (новый
PSR-0 загрузчик классов, namespace, меньше
классов).
10. AR
– Лучше 1.1.
– AR2 кушает меньше памяти и работает
быстрее. В режиме asArray значительно.
13. События
class MyComponent extends yiibaseComponent
{
public function test($name)
{
$this->trigger('test', new yiibaseEvent($this, $name));
}
public function hello($name)
{
echo 'Hello, '.$name.'!';
}
}
$component = new MyComponent();
$component->on('test', function($event) {
echo $event->sender->hello($event->data);
});
$component->test('Alex');
// out:
Hello, Alex!
16. Ошибки
• Нефатальные ошибки конвертируются в
исключения.
• Фатальные ошибки ловятся и показываются
красиво.
• Фатальные ошибки пишутся в лог в
подавляющем большинстве случаев.
18. Перехват фатальных ошибок в PHP
– register_shutdown_function() /
error_get_last().
– ini_set('display_errors', 0);
– Стек можно получить из XDebug.
– Ошибки нехватки памяти. Резерв.
19. Особенности конвертирования
ошибок в исключения
• set_error_handler, кидаем исключение.
• set_exception_handler, обрабатываем.
• Исключения в __toString().
20. Отладка и лог
• Ошибки пишутся в лог всегда.
• В планах полноценная отладочная
панелька.
27. AR
class User extends yiidbActiveRecord
{
public function table()
{
return 'tbl_user';
}
public function scenarios()
{
return array(
'login' => array('username', 'password'),
'register' => array('username', 'email',
'password'),
);
}
}
28. Валидация
function rules() {
return array(
// rule applied when corresponding field is "safe"
array('username', 'length', 'min' => 2),
array('first_name', 'length', 'min' => 2),
array('password', 'required'),
// rule applied when scenario is "signup" no matter if field is "safe" or not
array('hashcode', 'check', 'on' => 'signup'),
);
}
function scenarios() {
return array(
// on signup allow mass assignment of username
'signup' => array('username', 'password'),
'update' => array('username', 'first_name'),
);
}
33. AR relations
class Customer extends yiidbActiveRecord
{
public function getOrders()
{
return $this->hasMany('Order',
array('customer_id' => 'id'));
}
}
$customer = Customer::find($id);
$orders = $customer->orders; // $orders is an
array of Order objects
34. AR link/unlink
$customer = Customer::find(1);
$order = new Order;
$order->subtotal = 100;
$customer->link('orders', $order);
35. AR scope
class Customer extends yiidbActiveRecord
{
// ...
/**
* @param ActiveQuery $query
*/
public function active($query)
{
$query->andWhere('status = 1');
}
}
$customers = Customer::find()->active()->all();
36. AR scope
class Customer extends yiidbActiveRecord
{
// ...
/**
* @param ActiveQuery $query
* @param integer $age
*/
public function olderThan($query, $age = 30)
{
$query->andWhere('age > :age', array(':age' =>
$age));
}
}
$customers = Customer::find()->olderThan(50)->all();
37. noSQL?
• Всякие варианты кеша.
• Не кэш:
– Пробуем написать обёртку для Redis.
– Планируем также пощупать Mongo.
39. Консольное приложение
– Консольное и веб очень похожи.
– Консольная команда = контроллер.
– Консолька будет цветастая.
– Документация для help из phpdoc.
40. yiic app
– Как минимум два приложения
• Простое
• Посложнее
– Можно сделать свои шаблоны.
41. 1 или 2?
Работайте на стабильном.
1.1 поддерживается как минимум до
31 декабря, 2015.