Yii2 руководство на русском

Введение

Первое знакомство

Структура приложения

Обработка запросов

Основные понятия

Работа с базами данных

Получение данных от пользователя

Отображение данных

Безопасность

Кеширование

Веб-сервисы REST

Инструменты разработчика

Тестирование

Специальные темы

Виджеты

Хелперы

Search code, repositories, users, issues, pull requests…

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

Полное руководство по Yii 2.0

Данное руководство выпущено в соответствии с положениями о документации Yii.

All Rights Reserved.

2014 © Yii Software LLC.

Введение

  • О Yii
  • Обновление с версии 1.1

Первое знакомство

  • Установка Yii
  • Запуск приложения
  • Говорим «привет»
  • Работа с формами
  • Работа с базами данных
  • Генерация кода при помощи Gii
  • Что дальше?

Структура приложения

  • Обзор
  • Входные скрипты
  • Приложения
  • Компоненты приложения
  • Контроллеры
  • Представления
  • Модели
  • Фильтры
  • Виджеты
  • Модули
  • Ресурсы
  • Расширения

Обработка запросов

  • Bootstrapping
  • Разбор и генерация URL
  • Запросы
  • Ответы
  • Сессии и куки
  • Обработка ошибок
  • Логирование

Основные понятия

  • Компоненты
  • Свойства
  • События
  • Поведения
  • Конфигурации
  • Псевдонимы
  • Автозагрузка классов
  • Service Locator
  • Dependency Injection Container

Работа с базами данных

  • Объекты доступа к данным (DAO) — Соединение с базой данных, простые запросы, транзакции и работа со схемой.
  • Построитель запросов — Запросы к базе данных через простой слой абстракции.
  • TBD Active Record — Получение объектов AR, работа с ними и определение связей.
  • Миграции — Контроль версий схемы данных при работе в команде.
  • TBD Sphinx
  • TBD Redis
  • TBD MongoDB
  • TBD ElasticSearch

Получение данных от пользователя

  • Создание форм
  • Валидация
  • Загрузка файлов
  • Работа с несколькими моделями

Отображение данных

  • Форматирование данных
  • Постраничная разбивка
  • Сортировка
  • TBD Провайдеры данных
  • TBD Виджеты для данных
  • Темизация

Безопасность

  • Аутентификация
  • Авторизация
  • Работа с паролями
  • TBD Клиенты авторизации
  • Лучшие практики

Кеширование

  • Обзор
  • Кэширование данных
  • Кэширование фрагментов
  • Кэширование страниц
  • HTTP кэширование

Веб-сервисы REST

  • Быстрый старт
  • Ресурсы
  • Контроллеры
  • Роутинг
  • Форматирование ответа
  • Аутентификация
  • Ограничение частоты запросов
  • Версионирование
  • Обработка ошибок

Инструменты разработчика

  • TBD Отладочная панель и отладчик
  • TBD Генерация кода с Gii
  • TBD Генератор документации API

Тестирование

  • Обзор
  • Настройка тестового окружения
  • Модульные тесты
  • Функциональные тесты
  • Приёмочные тесты
  • Фикстуры

Расширение Yii

  • TBD Создание расширений
  • TBD Расширение кода фреймворка
  • TBD Использование сторонних библиотек
  • TBD Интеграция Yii в сторонние системы
  • TBD Одновременное использование Yii 1.1 и 2.0
  • TBD Использование Composer

Специальные темы

  • Шаблон приложения advanced
  • TBD Создание приложения с нуля
  • Консольные команды
  • Интернационализация
  • TBD Отправка почты
  • Оптимизация производительности
  • TBD Работа на shared хостинге
  • TBD Шаблонизаторы

Виджеты

  • GridView: link to demo page
  • ListView: link to demo page
  • DetailView: link to demo page
  • ActiveForm: link to demo page
  • Pjax: link to demo page
  • Menu: link to demo page
  • LinkPager: link to demo page
  • LinkSorter: link to demo page
  • TBD Виджеты Bootstrap
  • TBD Виджеты Jquery UI

Хелперы

  • TBD Обзор
  • ArrayHelper
  • TBD Html
  • Url хелпер
  • TBD Security

Полное руководство по Yii 2.0

Изучайте Yii2 по руководству от разработчиков. Очень грамотная документация, которая обновляется и дополняется вместе с обновлениями фреймворка:

  • Полное руководство по Yii 2.0 на русском языке (на Github)
  • Ещё оно лежит также и здесь — https://nix-tips.ru/yii2-api-guides/guide-ru-READM…

На 19.02.2018 оно таково:

Введение

  • О Yii

Yii – это высокопроизводительный компонентный PHP фреймворк. Подходит для разработки всех типов веб-приложений:
порталы, форумы, CMS, магазины или RESTful-приложения. Yii отлично расширяем и производителен. Есть сейчас 2 версии Yii — Yii 1.0 и Yii 2.0. Чтобы узнать подходит ли ваш хостинг для Yii, просто запустите скрипт проверки требований (он поставляется в каждом релизе Yii 2)

  • Обновление с версии 1.1

Обновление нетривиально, так как Yii 2 полностью переписан и нужно кропотливо копаться в коде, обновляя его под новую ветку фреймворка.

Первое знакомство

  • Установка Yii

Установить Yii можно 2 способами: используя composer (предпочтительно) или скачав архив. Также можно установить basic или advanced шаблон, соответственно для простого и более продвинутого приложения.

  • Запуск приложения

Установленный шаблон уже содержит простой пример и несколько страничек. Работает простая авторизация пользователя администратора. В этом разделе показано на рисунке-схеме, как проходит запрос в приложении. Так что изучайте, ознакамливайтесь.

  • Говорим «привет»

Здесь показано как создать страницу с надписью «привет». Учимся создавать действие контроллера и представление.

  • Работа с формами

Учимся получать данные от пользователя. Делаем форму с полями имя пользователя и email. Потребуется создать модель, объявить правила проверки введённых данных.

  • Работа с базами данных

Настраиваем подключение к БД. Определяем класс Active Record. Запрашиваем и отображаем данные.

  • Генерация кода при помощи Gii

Базовый код можно генерировать в Yii автоматически. Активируем Gii, создаём Active Record класс с помощью Gii. Генерируем код для реализации CRUD для таблиц БД. Настраиваем код, сгенерированный Gii.

  • Что дальше?

Изучайте документацию: подробное руководство, описание классов, вики-статьи и книги. Расширения. Сообщество.

Структура приложения

  • Обзор

Yii-приложения организованы по MVC шаблону проектирования. Модели — это данные, бизнес-логика и бизес-правила. Представления отвечают за отображение информации. Контроллеры принимают входные данные от пользователя и преобразуют их в понятный для моделей формат и команды, также отвечают за отображение нужного представления.

  • Входные скрипты

Это первое звено в процессе начальной загрузки приложения. Входные скрипты для веб-приложений — index.php, для консольных приложений — yii.php

  • Приложения

Приложения это объекты, которые управляют всей структурой и жизненным циклом прикладной системы Yii. Во входном скрипте создаётся один объект приложения и он доступен глобально через \Yii::$app. Существуют 2 вида приложений — веб-приложения и консольные приложения. Первые занимаются обработкой веб-запросов, вторые — консольных команд. Входной скрипт при создании приложения, загружает конфигурацию и применяет её к приложению.

  • Компоненты приложения
  • Контроллеры
  • Модели
  • Представления
  • Модули
  • Фильтры
  • Виджеты
  • Ресурсы
  • Расширения

Обработка запросов

  • Обзор
  • Bootstrapping
  • Разбор и генерация URL
  • Запросы
  • Ответы
  • Сессии и куки
  • Обработка ошибок
  • Логирование

Основные понятия

  • Компоненты
  • Свойства
  • События
  • Поведения
  • Конфигурации
  • Псевдонимы
  • Автозагрузка классов
  • Service Locator
  • Dependency Injection Container

Работа с базами данных

  • Объекты доступа к данным (DAO) — Соединение с базой данных, простые запросы, транзакции и работа со схемой.
  • Построитель запросов — Запросы к базе данных через простой слой абстракции.
  • Active Record — Получение объектов AR, работа с ними и определение связей.
  • Миграции — Контроль версий схемы данных при работе в команде.
  • Sphinx
  • Redis
  • MongoDB
  • ElasticSearch

Получение данных от пользователя

  • Создание форм
  • Валидация
  • Загрузка файлов
  • Табличный ввод
  • Работа с несколькими моделями

Отображение данных

  • Форматирование данных
  • Постраничная разбивка
  • Сортировка
  • Провайдеры данных
  • Виджеты для данных
  • Работа с клиентскими скриптами
  • Темизация

Безопасность

  • Обзор
  • Аутентификация
  • Авторизация
  • Работа с паролями
  • Криптография
  • Клиенты авторизации
  • Лучшие практики

Кеширование

  • Обзор
  • Кэширование данных
  • Кэширование фрагментов
  • Кэширование страниц
  • HTTP кэширование

Веб-сервисы REST

  • Быстрый старт
  • Ресурсы
  • Контроллеры
  • Роутинг
  • Форматирование ответа
  • Аутентификация
  • Ограничение частоты запросов
  • Версионирование
  • Обработка ошибок

Инструменты разработчика

  • Отладочная панель и отладчик
  • Генерация кода с Gii
  • Генератор документации API

Тестирование

  • Обзор
  • Настройка тестового окружения
  • Модульные тесты
  • Функциональные тесты
  • Приёмочные тесты
  • Фикстуры

Специальные темы

  • Шаблон приложения advanced
  • Создание приложения с нуля
  • Консольные команды
  • Встроенные валидаторы
  • Интернационализация
  • Отправка почты
  • Оптимизация производительности
  • Окружение виртуального хостинга
  • Шаблонизаторы
  • Работа со сторонним кодом
  • Использование Yii в качестве микро-framework’а

Виджеты

  • GridView
  • ListView
  • DetailView
  • ActiveForm
  • Pjax
  • Menu
  • LinkPager
  • LinkSorter
  • Виджеты Bootstrap
  • Виджеты Jquery UI

Хелперы

  • Обзор
  • ArrayHelper
  • Html
  • Url хелпер

Время на прочтение
7 мин

Количество просмотров 92K

image
От переводчика.
Жизнь такая штука, как-то я начинал цикл статей по Java Spring и сообщество сообщило, что выбор пал не на самую свежую информацию. Сейчас жизнь забросила меня в хардкорное программирование на С++, а душа все равно нуждается в вебе, поэтому в свободное время решил изучить вместе с вами технологии, которые может скушать любой хостинг и в то же время сложность разрабатываемых приложений и ООП не сильно пострадает от PHP.
Исходный текст статьи на английском вы найдете по адресу http://code.tutsplus.com/tutorials/programming-with-yii2-getting-started—cms-22440
Перевод не претендует на дословность, но о грубых ошибках, если такие имеются – прошу сообщать в комментариях.

Если вы спрашиваете «что такое YII?», прочтите более ранний урок «Введение в фреймворк YII», который описывает преимущества YII, а также затрагивает вопрос новшеств второй версии фреймворка от 12 октября 2014.
Этот урок посвящен установке YII2, настройке вашего окружения, написанию классического приложения «Привет, мир!», настройке удаленного окружения для хостинга и деплоя с GitHub.

Установка YII2

Документация

Вы можете найти подробную инструкцию здесь, я же пробегусь по простой и типичной для Mac OS X установке и настройки среды. У фреймоврка есть подробная документация и описание классов, которое содержит все детали о YII.
От переводчика. Я в свою очередь не имею под рукой яблочного девайса и буду проделывать все действия под Ubuntu (запущенной под VMWare Player).

Установка Composer

Для комфортного использования фреймворка рекомендуется использовать популярный менеджер расширений PHP – Composer. Если он у вас еще не установлен проделайте следующее:

curl -s http://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
Установка YII2

Теперь используем Composer для установки YII2. Для установки требуется аккаунт на GitHub, если у вас его нет – зарегистрируйтесь.
Давайте назовем наш первый проект «hello»:

cd ~/Sites
composer global require "fxp/composer-asset-plugin:1.0.0-beta2"
composer create-project --prefer-dist yiisoft/yii2-app-basic hello

YII2 поддерживает два типа приложений для разработки: простые и продвинутые. Для данного урока мы будем использовать простое приложение, оно устанавливается по умолчанию. Шаблон продвинутого приложения поддерживает front-end, back-end и консоль, так же как WordPress, это административная панель и задачи для cron.

Установка и настройка локальной среды разработки

Я использую бесплатное ПО MAMP for OS X с открытым исходным кодом, для разработки. Убедитесь, что MAMP запущен и его web сервер и сервер базы данных запущены. Затем создайте символьную ссылку на директорию с сайтом:

cd /Applications/MAMP/htdocs
ln -s ~/Sites/hello/ /Applications/MAMP/htdocs/hello

Теперь, если вы настроили все верно, то открыв localhost:8888/hello/web вы увидите простой шаблон приложения YII2 с Bootstrap 3.x.
image
Эта страница удивит разработчиков, ранее разрабатывающих на YII 1.1, где не был предустановлен Bootstrap последней версии, который прочно занял свое место в сети.

YII архитектура приложения

Одна из ключевых особенностей фреймворка – поддержка паттерна MVC. Это позволяет создавать более структурированный код, который проще понимать, упрощает многие вещи, которые реализуются с трудом на PHP, такие как безопасность и автоматическая кодогенерация. Также это способствует поддержке и повторному использованию кода.
В приложении YII весь трафик направляется на один файл /web/index.php. Этот файл загружает YII, зависимости, а затем запускает наше приложение.

<?php
 
// comment out the following two lines when deployed to production
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 yii\web\Application($config))->run();

По умолчанию это Index метод в файле /controllers/SiteController.php

public function actionIndex()
    {
        return $this->render('index');
    }

Как правило, в контроллерах много методов, но с минимальным количеством кода. Контроллеры управляют доступом, загружают модели и представления. Основная смысловая нагрузка должна лежать на моделях, а представления лишь отображают шаблоны.
По умолчанию YII отображает /views/layouts/main.php в качестве представления для /views/site/index.php. main.php поддерживает html и css структуру страницы с тулбаром и контентом. Внутри main.php происходит вызов содержимого:

<div class="container">
            <?= Breadcrumbs::widget([
                'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
            ]) ?>
            <?= $content ?>
</div>

Переменная $content будет заменена кодом сгенерированным в /views/site/index.php, который представляет статичную html страницу.

Пишем приложение «Привет мир!»

Включаем красивые URL-адреса

В начале давайте включим красивые адреса при помощи mod_rewrite. Если на домашней странице вы кликнете по кнопке about то увидите адрес подобный этому: localhost:8888/hello/web/index.php?r=site%2Fabout. Мы же сейчас его приведем к такому виду localhost:8888/hello/web/site/about.
В директории config хранятся настройки всей вашей среды: настройки веб приложения, консольного приложения и настройки баз данных. Изменим файл /config/web.php следующим образом:

'components' => [
//...
  'urlManager' => [
          'showScriptName' => false,
          'enablePrettyUrl' => true
                  ],    
//...
'request' => [

Затем необходимо создать в директории /web, где хранится наш index.php, файл .htaccsess, со следующим содержимым:

RewriteEngine on
 
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php

Убедитесь, что в MAMP включен mod_rewrite, если же возникли проблемы посмотрите ветку на stackoverflow.
В вашем браузере перейдите по адресу localhost:8888/hello/web/site/about, теперь там вы должны увидеть страницу About простого приложения YII.

Создаем экшн

Следующим шагом создадим действие для контроллера, назвав Say, для повтора нашего сообщения. В файле /controllers/SiteController.php добавим следующее:

public function actionSay($target = 'World')
{
    return $this->render('say', ['target' => $target]);
}

Эта функция будет искать параметр target в адресе url для его вывода на экран. В случае его отсутствия выведется просто «World». В фреймворке YII экшены реализованы как методы с префиксом actionИмяЭкшена. В класссе SiteController мы использовали public function actionSay для создания экшена Say.
Стандартным поведением метода render является поиск файла в views/ControllerID/ViewName.php поэтому давайте создадим в /views/site/ файл say.php:

<?php
use yii\helpers\Html;
?>
<h1>Hello <?= Html::encode($target) ?></h1>
<p>Welcome to your Yii2 demonstration application.</p>

Этот шаблон выведет строку «Hello +$(target)», где $(target) — переменная переданная в url. Для обеспечения безопасности она попадает не на прямую в строку, а в начале проверяется на вредоносный код.
Если вы теперь посетите localhost:8888/hello/web/site/say?target=Tuts%20Readers, то увидите следующее:
image
Это простой пример реализации MVC модели фреймворка. Более детально вы можете ознакомиться с данным примером на сайте фреймворка в официальной документации.
А теперь давайте зальем наше приложение на GitHub и запустим на продакшн-сервере.

Настройка вашей удаленной среды

Простое приложение YII должно запускаться на серверах Apache и Nginx «из коробки», я буду приводить инструкции по запуску на Apache, про Nginx вы сможете найти здесь.

Создаем репозиторий на GitHub

Как только я установил базовый шаблон YII, я создаю репозиторий на GitHub:
image
Внимание: Гораздо проще скопировать и вставить YII .gitignore с GitHub (https://github.com/yiisoft/yii2/blob/master/.gitignore) в локальную папку ~/Sites/hello/.gitignore, чем затем удалять в ручную лишнее. Хотя оба варианта допустимы.
Я использую приложение GitHub Mac OS X(https://mac.github.com/), хотя вы также можете воспользоваться командной строкой для инициализации репозитория. Например так(замените «youraccount» вашим именем на GitHub:

cd ~/Sites/hello
git init
git commit -m "first commit of hello world for yii2"
git remote add origin git@github.com:youraccount/hello.git
git push -u origin master

От переводчика. Я в качестве репозитория предпочитаю использовать Bitbucket, так как он позволяет иметь приватные репозитории бесплатно.
Конфигурируем Apache на сервере
Если у вас до сих пор не сконфигурирован сервер, рекомендую посмотреть на инструкцию по конфигурации сервера на Ubuntu (http://jeffreifman.com/digitalocean). Если у вас есть IP адрес, сконфигурируйте DNS вашего сервера:

yourdomain.com A 192.161.234.17

Теперь войдите удаленно по ssh на ваш сервер при помощи IP или доменного имени

ssh root@yourserver.com

Обновите кофигурацию, установите Git, включите mod_rewrite для Apache и mcrypt для PHP.

sudo apt-get update
sudo apt-get upgrade
sudo a2enmod rewrite
php5enmod mcrypt

Настройка доступа удаленного сервера к GitHub
Теперь мы настроим pull запросы с GitHub. Вначале установите Git

sudo apt-get install git

Теперь мы создадим группу для www, добавим данные и GitHub пользователей и настроим их права:

adduser github
addgroup www 
adduser github www
adduser www-data www
chown -R :www /var/www
chmod +s -R /var/www
chmod -vR g+w /var/www/

Теперь создадим ключ для синхронизации с репозиторием:

su github
ssh-keygen -t rsa -C "yourgithubaccount@youremail.com"
exit
cat /home/github/.ssh/id_rsa.pub

Вы увидите нечто похожее на это, вам необходимо скопировать и вставить этот ключ на GitHub
(если возникле проблемы посмотрите здесь (https://help.github.com/articles/error-permission-denied-publickey/)):
image
Зайдите в раздел настроек репозитория и добавьте этот ключ:
image
Затем вы увидите что-то подобное:
image
Наконец-то вы сможете склонировать ветку на ваш сервер:

git clone git@github.com:youraccount/hello.git /var/www/hello

Если все правильно сконфигурированно то вы увидите:
image
По мере увеличения количества кода вы через репозиторий сможете легко синхронизировать код локальной машины и продакшн-сервера. Это гораздо проще чем синхронизировать архивом или вручную, вы убедитесь в этом сами в процессе дальнейшего обучения.
Создание конфигурации сайта для Apache
Создадим конфигурационный файл:

nano /etc/apache2/sites-available/hello.conf

Измените доменное имя на ваше:

<VirtualHost *:80>
 ServerName yourdomain.com
# Set document root to be "basic/web"
DocumentRoot "/var/www/hello/web"
<Directory "/var/www/hello/web">
    # use mod_rewrite for pretty URL support
    RewriteEngine on
    # If a directory or a file exists, use the request directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # Otherwise forward the request to index.php
    RewriteRule . index.php
</Directory>
</VirtualHost>

Включите ваш сайт:

a2ensite hello.conf
a2dissite 000-default.conf 
service apache2 reload

Убедитесь в том что ваше приложение работает пройдя по ссылке yourdomain.com/site/say?target=World! (Отладочный тулбар фреймворка внизу страницы будет отключен!)
image
Поздравляю! Теперь мы готовы приступить к изучению более сложных особенностей фреймворка!

Понравилась статья? Поделить с друзьями:
  • Как пользоваться стиральной машиной автомат индезит инструкция по эксплуатации
  • Нурофен детский сироп инструкция по применению детям возрасту таблица
  • Проектор led projector инструкция на русском
  • Руководство по эксплуатации сузуки аэрио
  • Как сделать осаго через госуслуги пошаговая инструкция