SlideShare a Scribd company logo
Yii2
Web
Карнаухов Даниил
Почему Yii2
- Free, OpenSource
- Постоянно развивающийся
- Общирное сообщество
- Оптимизированная производительность
- Гибкий. Хорошо настраиваемый
- Подходит для решения любых задач
- Включает множество необходимых инструментов
- Большое количество модулей
Паттерн MVC
Как реализован MVC в фреймворке
Жизненный цикл запроса
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();
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
Автозагрузка классов
Каждый класс должен принадлежать пространству имен (т.е. basemodels).
Каждый класс должен находиться в отдельном файле, путь к которому
определяется правилом:
$classFile = Yii::getAlias('@' . str_replace('', '/', $className) . '.php');
Конфигурация приложения
Файлы конфигурации находяться в /config/*.php (для basic приложения).
Основные элементы конфигурации :
user - класс аутентификации в системе;
mailer - отправка почты;
db - подключение к базе данных;
urlManager - роутинг;
cache - класс кеша;
errorHandler - стандартный обработчик ошибок;
session - компонент сессий.
Контроллеры
use yiiwebController;
class SiteController extends Controller
{
public function actionTest()
{
return 'Hello world!';
}
}
yiiwebController
yiiconsoleController
yiirestController
public function actionIndex()
{
return $this->render('index');
}
public function actionCreate()
{
$model = new Category();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
Основы роутинга
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
],
],
'contacts' => 'site/contacts',
[
'pattern' => 'my-super-category',
'route' => 'category/view',
'defaults' => ['id' => 1],
],
Модели
use yiibaseModel;
class LoginForm extends Model { … }
Аттрибуты, метки аттрибутов, валидация встроенными правилами, сценарии, массовое
присвоение.
public function rules()
{
return [
[['username', 'password'], 'required'],
['rememberMe', 'boolean'],
['password', 'validatePassword'],
];
}
Представления
view/
layouts/
main.php
site/
index.php
return $this->render('contact', [
'model' => $model,
]);
<?= $this->render('_form', [
'model' => $model,
]) ?>
Формы
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'description')->textarea(['rows' => 6]) ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn
btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
Валидация
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) {
...
}
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();
}
$query = (new yiidbQuery())
->select(['id', 'name'])
->from('category')
->where('description IS NOT NULL')
->limit(2);
print_r($query->all());
ActiveRecord
class Category extends yiidbActiveRecord
{
public static function tableName()
{
return 'category';
}
public function rules()
{
return [
[['name'], 'required'],
[['description'], 'string'],
[['name'], 'string', 'max' => 255],
];
}
...
$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);
}
Введение в поведения
Поведения - “реализация множественного наследования в Yii2”.
use yiibehaviorsTimestampBehavior;
class Category extends yiidbActiveRecord
{
public function behaviors()
{
return [
TimestampBehavior::className(),
];
}
...
}
return [
[
'class' => TimestampBehavior::className(),
'createdAtAttribute' => 'create_time',
'updatedAtAttribute' => 'update_time',
'value' => new yiidbExpression('NOW()'),
]
];
return [
[
'class' => 'appbehaviorsActiveRecordFileUpload',
'fileAttribute' => 'image',
'fileDir' => 'imgcategoryuploads',
]
];
Gii
Быстрая генерация шаблонов: ActiveRecord, CRUD операций для ActiveRecord,
контроллеров, модулей, расширений, форм.
$config['modules']['gii'] = [
'class' => 'yiigiiModule',
'allowedIPs' => ['127.0.0.1', '::1'],
];
ActiveRecord relation
Валидация:
[['category_id'], 'exist', 'skipOnError' => true, 'targetClass' => Category::className(),
'targetAttribute' => ['category_id' => 'id']],
Связывание моделей:
// Category.php
public function getProducts()
{
return $this->hasMany(Product::className(), ['id' => 'category_id']);
}
// Product.php
public function getCategory()
{
return $this->hasOne(Category::className(), ['id' => 'category_id']);
}
Аутентификация
'user' => [
'identityClass' => 'appmodelsUser',
'enableAutoLogin' => true,
],
class User extends yiibaseObject implements yiiwebIdentityInterface
{
...
}
$user = new User;
Yii::$app->user->login($user);
ACL
use yiifiltersAccessControl;
class CategoryController extends Controller
{
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
'allow' => true,
'actions' => ['index', 'create', 'update', 'delete'],
'roles' => ['@']
],
],
];
RBAC
'authManager' => [
'class' => 'yiirbacPhpManager',
]
if (Yii::$app->user->can('createCategory')) {
...
}
if (Yii::$app->user->can('updateCategory', ['category' => $category])) {
...
}
RBAC - role base access control.
class RoleRule extends Rule
{
public $name = 'Role';
public function execute($user, $item, $params)
{
$user = User::findOne($user);
if($user) {
$role = $user->role;
if($item->name === 'admin') {
return $role == Role::ROLE_ADMIN;
} else if($item->name === 'user') {
return $role == Role::ROLE_ADMIN || $role == Role::ROLE_USER;
}
}
return false;
}
}
События
События - это механизм, внедряющий элементы собственного кода в
существующий код в определенные моменты его исполнения.
class Product extends Component
{
const EVENT_EXPORT_TO_XML = 'export_to_xml';
public function export()
{
$this->trigger(self::EVENT_EXPORT_TO_XML);
}
}
$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');
Модули
Модули - это законченные программные блоки, состоящие из моделей,
представлений, контроллеров и других вспомогательных компонентов.
namespace appmodulesforum;
class Forum extends yiibaseModule
{
public $controllerNamespace = 'appmodulesforumcontrollers';
public function init()
{
parent::init();
}
}
...
'modules' => [
'forum' => [
'class' => 'appmodulesforumForum',
],
],
...
app/
modules/
forum/
controllers/
DefaultController.php
view/
default/
index.php
Forum.php
Спасибо за внимание.

More Related Content

What's hot

Crazy owl yii1=> yii2
Crazy owl yii1=> yii2Crazy owl yii1=> yii2
Crazy owl yii1=> yii2
Alexei Smolyanov
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2
Paul Klimov
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoMagecom Ukraine
 
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...CodeFest
 
Написание DSL в Perl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perl
mayperl
 
Организация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвОрганизация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий Копачёв
Mail.ru Group
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в MagentoMagecom Ukraine
 
Все дороги ведут в Checkout
Все дороги ведут в CheckoutВсе дороги ведут в Checkout
Все дороги ведут в CheckoutMagecom Ukraine
 
Сущности в Drupal 7
Сущности в Drupal 7Сущности в Drupal 7
Сущности в Drupal 7
Itech4Web
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoMoscowDjango
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPress
Ruslan Begaliev
 
DevHub 3 - Pricing
DevHub 3 - PricingDevHub 3 - Pricing
DevHub 3 - PricingMagento Dev
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4Technopark
 
Архитектура RESTful API на Pyramid — приемы проектирования Дмитрий Вахрушев
Архитектура RESTful API на Pyramid — приемы проектирования Дмитрий ВахрушевАрхитектура RESTful API на Pyramid — приемы проектирования Дмитрий Вахрушев
Архитектура RESTful API на Pyramid — приемы проектирования Дмитрий Вахрушев
it-people
 
DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2Alexander Makarov
 
MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)
GoSharp
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
Alexander Makarov
 

What's hot (19)

Crazy owl yii1=> yii2
Crazy owl yii1=> yii2Crazy owl yii1=> yii2
Crazy owl yii1=> yii2
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в Magento
 
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
 
Написание DSL в Perl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perl
 
Организация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвОрганизация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий Копачёв
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в Magento
 
course js day 4
course js day 4course js day 4
course js day 4
 
Render API.
Render API.Render API.
Render API.
 
Все дороги ведут в Checkout
Все дороги ведут в CheckoutВсе дороги ведут в Checkout
Все дороги ведут в Checkout
 
Сущности в Drupal 7
Сущности в Drupal 7Сущности в Drupal 7
Сущности в Drupal 7
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на Django
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPress
 
DevHub 3 - Pricing
DevHub 3 - PricingDevHub 3 - Pricing
DevHub 3 - Pricing
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 
Архитектура RESTful API на Pyramid — приемы проектирования Дмитрий Вахрушев
Архитектура RESTful API на Pyramid — приемы проектирования Дмитрий ВахрушевАрхитектура RESTful API на Pyramid — приемы проектирования Дмитрий Вахрушев
Архитектура RESTful API на Pyramid — приемы проектирования Дмитрий Вахрушев
 
DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2
 
MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 

Viewers also liked

Introducción a Yii2
Introducción a Yii2Introducción a Yii2
Palestra yii2
Palestra yii2Palestra yii2
UK Enterprise Social Network Software Solutions Analysis
UK Enterprise Social Network Software Solutions AnalysisUK Enterprise Social Network Software Solutions Analysis
UK Enterprise Social Network Software Solutions Analysis
AgileElephant
 
rassegna stampa
rassegna stamparassegna stampa
rassegna stampawattajug
 
LinkedIn and Twitter Presentation for Westchester Career Counselors' Network
LinkedIn and Twitter Presentation for Westchester Career Counselors' NetworkLinkedIn and Twitter Presentation for Westchester Career Counselors' Network
LinkedIn and Twitter Presentation for Westchester Career Counselors' Networkstmstephen
 
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Tchelinux
 
Arquitetura ARM - Raspberry Pi
Arquitetura ARM - Raspberry PiArquitetura ARM - Raspberry Pi
Arquitetura ARM - Raspberry Pi
Juliane Silva
 
Framework Yii
Framework YiiFramework Yii
Framework Yii
Juliane Silva
 
Framework Yii
Framework YiiFramework Yii
Framework Yii
Leonardo Ribeiro
 
Creating applications with Grails, Angular JS and Spring Security
Creating applications with Grails, Angular JS and Spring SecurityCreating applications with Grails, Angular JS and Spring Security
Creating applications with Grails, Angular JS and Spring Security
Alvaro Sanchez-Mariscal
 
Soziale Medien in der Wissenschaftskommunikation
Soziale Medien in der WissenschaftskommunikationSoziale Medien in der Wissenschaftskommunikation
Soziale Medien in der Wissenschaftskommunikation
Rudolf Mumenthaler
 

Viewers also liked (13)

Introducción a Yii2
Introducción a Yii2Introducción a Yii2
Introducción a Yii2
 
Palestra yii2
Palestra yii2Palestra yii2
Palestra yii2
 
UK Enterprise Social Network Software Solutions Analysis
UK Enterprise Social Network Software Solutions AnalysisUK Enterprise Social Network Software Solutions Analysis
UK Enterprise Social Network Software Solutions Analysis
 
rassegna stampa
rassegna stamparassegna stampa
rassegna stampa
 
Yii2
Yii2Yii2
Yii2
 
LinkedIn and Twitter Presentation for Westchester Career Counselors' Network
LinkedIn and Twitter Presentation for Westchester Career Counselors' NetworkLinkedIn and Twitter Presentation for Westchester Career Counselors' Network
LinkedIn and Twitter Presentation for Westchester Career Counselors' Network
 
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
 
Arquitetura ARM - Raspberry Pi
Arquitetura ARM - Raspberry PiArquitetura ARM - Raspberry Pi
Arquitetura ARM - Raspberry Pi
 
Framework Yii
Framework YiiFramework Yii
Framework Yii
 
Framework Yii
Framework YiiFramework Yii
Framework Yii
 
Yii workshop
Yii workshopYii workshop
Yii workshop
 
Creating applications with Grails, Angular JS and Spring Security
Creating applications with Grails, Angular JS and Spring SecurityCreating applications with Grails, Angular JS and Spring Security
Creating applications with Grails, Angular JS and Spring Security
 
Soziale Medien in der Wissenschaftskommunikation
Soziale Medien in der WissenschaftskommunikationSoziale Medien in der Wissenschaftskommunikation
Soziale Medien in der Wissenschaftskommunikation
 

Similar to Yii2

Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Dev_Party
 
Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1
dima_kuzovlev
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from JqueryMagento Dev
 
Magento code debugging
Magento code debuggingMagento code debugging
Magento code debugging
aheadWorks
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноKrivoy Rog IT Community
 
Yii: миграции и инсталляции
Yii: миграции и инсталляцииYii: миграции и инсталляции
Yii: миграции и инсталляции
Paul Klimov
 
Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015
Sergey Biryukov
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
it-people
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
 
MODX 3: Что нового?
MODX 3: Что нового?MODX 3: Что нового?
MODX 3: Что нового?
Ivan Klimchuk
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
Eugene Abrosimov
 
Enterprise Patterns in Magento
Enterprise Patterns in MagentoEnterprise Patterns in Magento
Enterprise Patterns in Magento
Vrann Tulika
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7Technopark
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
Moscow.pm
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
Что нового в Django 1.4
Что нового в Django 1.4Что нового в Django 1.4
Что нового в Django 1.4
Илья Барышев
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPress
Darja Kruzhkova
 

Similar to Yii2 (20)

Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1Вёрстка WordPress тем - WP Kharkiv Meetup #1
Вёрстка WordPress тем - WP Kharkiv Meetup #1
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from Jquery
 
Magento code debugging
Magento code debuggingMagento code debugging
Magento code debugging
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
Yii: миграции и инсталляции
Yii: миграции и инсталляцииYii: миграции и инсталляции
Yii: миграции и инсталляции
 
Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
MODX 3: Что нового?
MODX 3: Что нового?MODX 3: Что нового?
MODX 3: Что нового?
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Enterprise Patterns in Magento
Enterprise Patterns in MagentoEnterprise Patterns in Magento
Enterprise Patterns in Magento
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Что нового в Django 1.4
Что нового в Django 1.4Что нового в Django 1.4
Что нового в Django 1.4
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPress
 

More from Noveo

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
Noveo
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
Noveo
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Noveo
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
Noveo
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
Noveo
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
Noveo
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
Noveo
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
Noveo
 
Rest
RestRest
Rest
Noveo
 
PHP basic
PHP basicPHP basic
PHP basic
Noveo
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
Noveo
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
Noveo
 
MySQL
MySQLMySQL
MySQL
Noveo
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
Noveo
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
Noveo
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
Noveo
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
Noveo
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
Noveo
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
Noveo
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
Noveo
 

More from Noveo (20)

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
 
Rest
RestRest
Rest
 
PHP basic
PHP basicPHP basic
PHP basic
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
MySQL
MySQLMySQL
MySQL
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
 

Yii2

  • 2. Почему Yii2 - Free, OpenSource - Постоянно развивающийся - Общирное сообщество - Оптимизированная производительность - Гибкий. Хорошо настраиваемый - Подходит для решения любых задач - Включает множество необходимых инструментов - Большое количество модулей
  • 4. Как реализован MVC в фреймворке
  • 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 - компонент сессий.
  • 9. Контроллеры use yiiwebController; class SiteController extends Controller { public function actionTest() { return 'Hello world!'; } } yiiwebController yiiconsoleController yiirestController
  • 10. public function actionIndex() { return $this->render('index'); } public function actionCreate() { $model = new Category(); if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->id]); } else { return $this->render('create', [ 'model' => $model, ]); } }
  • 11. Основы роутинга 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ ], ], 'contacts' => 'site/contacts', [ 'pattern' => 'my-super-category', 'route' => 'category/view', 'defaults' => ['id' => 1], ],
  • 12. Модели use yiibaseModel; class LoginForm extends Model { … } Аттрибуты, метки аттрибутов, валидация встроенными правилами, сценарии, массовое присвоение. public function rules() { return [ [['username', 'password'], 'required'], ['rememberMe', 'boolean'], ['password', 'validatePassword'], ]; }
  • 13. Представления view/ layouts/ main.php site/ index.php return $this->render('contact', [ 'model' => $model, ]); <?= $this->render('_form', [ 'model' => $model, ]) ?>
  • 14. Формы <?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?> <?= $form->field($model, 'description')->textarea(['rows' => 6]) ?> <div class="form-group"> <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> </div> <?php ActiveForm::end(); ?>
  • 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(), ]; } ... }
  • 21. return [ [ 'class' => TimestampBehavior::className(), 'createdAtAttribute' => 'create_time', 'updatedAtAttribute' => 'update_time', 'value' => new yiidbExpression('NOW()'), ] ]; return [ [ 'class' => 'appbehaviorsActiveRecordFileUpload', 'fileAttribute' => 'image', 'fileDir' => 'imgcategoryuploads', ] ];
  • 22. Gii Быстрая генерация шаблонов: ActiveRecord, CRUD операций для ActiveRecord, контроллеров, модулей, расширений, форм. $config['modules']['gii'] = [ 'class' => 'yiigiiModule', 'allowedIPs' => ['127.0.0.1', '::1'], ];
  • 23. ActiveRecord relation Валидация: [['category_id'], 'exist', 'skipOnError' => true, 'targetClass' => Category::className(), 'targetAttribute' => ['category_id' => 'id']], Связывание моделей: // Category.php public function getProducts() { return $this->hasMany(Product::className(), ['id' => 'category_id']); } // Product.php public function getCategory() { return $this->hasOne(Category::className(), ['id' => 'category_id']); }
  • 24. Аутентификация 'user' => [ 'identityClass' => 'appmodelsUser', 'enableAutoLogin' => true, ], class User extends yiibaseObject implements yiiwebIdentityInterface { ... } $user = new User; Yii::$app->user->login($user);
  • 25. ACL use yiifiltersAccessControl; class CategoryController extends Controller { public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'rules' => [ 'allow' => true, 'actions' => ['index', 'create', 'update', 'delete'], 'roles' => ['@'] ], ], ];
  • 26. RBAC 'authManager' => [ 'class' => 'yiirbacPhpManager', ] if (Yii::$app->user->can('createCategory')) { ... } if (Yii::$app->user->can('updateCategory', ['category' => $category])) { ... } RBAC - role base access control.
  • 27. class RoleRule extends Rule { public $name = 'Role'; public function execute($user, $item, $params) { $user = User::findOne($user); if($user) { $role = $user->role; if($item->name === 'admin') { return $role == Role::ROLE_ADMIN; } else if($item->name === 'user') { return $role == Role::ROLE_ADMIN || $role == Role::ROLE_USER; } } return false; } }
  • 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(); } }
  • 31. ... 'modules' => [ 'forum' => [ 'class' => 'appmodulesforumForum', ], ], ... app/ modules/ forum/ controllers/ DefaultController.php view/ default/ index.php Forum.php