2. Почему Yii2
- Free, OpenSource
- Постоянно развивающийся
- Общирное сообщество
- Оптимизированная производительность
- Гибкий. Хорошо настраиваемый
- Подходит для решения любых задач
- Включает множество необходимых инструментов
- Большое количество модулей
5. Жизненный цикл запроса
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
$config = require(__DIR__ . '/../config/web.php');
(new yiiwebApplication($config))->run();
6. Composer. Установка шаблона.
Composer - это пакетный менеджер уровня приложений для языка
программирования PHP, который предоставляет средства по управлению
зависимостями в PHP-приложении.
https://getcomposer.org
composer global require "fxp/composer-asset-plugin:~1.1.1"
composer create-project yiisoft/yii2-app-advanced advanced 2.0.8
7. Автозагрузка классов
Каждый класс должен принадлежать пространству имен (т.е. basemodels).
Каждый класс должен находиться в отдельном файле, путь к которому
определяется правилом:
$classFile = Yii::getAlias('@' . str_replace('', '/', $className) . '.php');
8. Конфигурация приложения
Файлы конфигурации находяться в /config/*.php (для basic приложения).
Основные элементы конфигурации :
user - класс аутентификации в системе;
mailer - отправка почты;
db - подключение к базе данных;
urlManager - роутинг;
cache - класс кеша;
errorHandler - стандартный обработчик ошибок;
session - компонент сессий.
15. Валидация
public function rules()
{
return [
[['name'], 'required'],
[['description'], 'string'],
[['name'], 'string', 'max' => 255],
];
}
['username', 'required', 'message' => 'Please choose a username.'],
['country', 'validateCountry'],
…
public function validateCountry($attribute, $params) {
...
}
16. DAO. Транзакции
$result = Yii::$app->db->createCommand('SELECT * FROM category')->queryAll();
Yii::$app->db->createCommand('UPDATE category SET name = :name WHERE description IS NOT NULL')
->bindValues([':name' => 'fakeCategory'])
->execute();
Yii::$app->db->transaction(function($db) {
...
});
$transaction = Yii::$app->db->beginTransaction();
try {
...
$transaction->commit();
} catch(Exception $e) {
$transaction->rollBack();
}
17. $query = (new yiidbQuery())
->select(['id', 'name'])
->from('category')
->where('description IS NOT NULL')
->limit(2);
print_r($query->all());
18. ActiveRecord
class Category extends yiidbActiveRecord
{
public static function tableName()
{
return 'category';
}
public function rules()
{
return [
[['name'], 'required'],
[['description'], 'string'],
[['name'], 'string', 'max' => 255],
];
}
...
19. $category = new Category;
$category->name = 'Test category';
$category->description = 'Hello world';
$category->save();
$category->name = 'test category1';
$category->save();
$category = Category::find(['name' => 'test category1'])->one();
echo $category->description;
public function beforeSave($insert)
{
$this->name .= ' test category';
return parent::beforeSave($insert);
}
20. Введение в поведения
Поведения - “реализация множественного наследования в Yii2”.
use yiibehaviorsTimestampBehavior;
class Category extends yiidbActiveRecord
{
public function behaviors()
{
return [
TimestampBehavior::className(),
];
}
...
}
28. События
События - это механизм, внедряющий элементы собственного кода в
существующий код в определенные моменты его исполнения.
class Product extends Component
{
const EVENT_EXPORT_TO_XML = 'export_to_xml';
public function export()
{
$this->trigger(self::EVENT_EXPORT_TO_XML);
}
}
29. $product = new Product();
$product->on(Product::EVENT_EXPORT_TO_XML, 'printProduct', 'XML');
function printProduct($event) {
echo $event->data;
}
$product->off(Product::EVENT_EXPORT_TO_XML, 'printProduct');
30. Модули
Модули - это законченные программные блоки, состоящие из моделей,
представлений, контроллеров и других вспомогательных компонентов.
namespace appmodulesforum;
class Forum extends yiibaseModule
{
public $controllerNamespace = 'appmodulesforumcontrollers';
public function init()
{
parent::init();
}
}