Оглавление

Введение Первое знакомство Структура приложения Обработка запросов Основные понятия Работа с базами данных Получение данных от пользователя Отображение данных Безопасность Кеширование Веб-сервисы REST Тестирование Специальные темы Виджеты Хелперы
Зачем реклама?

Использование Yii в качестве микро-framework'а

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

Это особенно удобно, когда Вам не нужен весь пред-установленный шаблонный код, такой как Assets или Views. Одним из таких случаев является создание JSON API. В следующих разделах будет показано, как это сделать.

Установка Yii #

Создайте каталог для файлов проекта и смените рабочий каталог на этот путь. В примерах используются команды Unix, но аналогичные команды существуют и в Windows.

mkdir micro-app
cd micro-app

Note: Для продолжения требуется немного знаний о Composer. Если Вы еще не знаете, как использовать Composer, пожалуйста, найдите время, чтобы прочитать Руководство Composer.

Создайте файл composer.json в каталоге micro-app с помощью Вашего любимого редактора и добавьте следующее:

{
    "require": {
        "yiisoft/yii2": "~2.0.0"
    },
    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ]
}

Сохраните файл и запустите команду composer install. Это установит framework со всеми его зависимостями.

Создание структуры проекта #

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

Создайте каталог web и поместите в него файл index.php со следующим содержимым:

<?php

// закомментируйте следующие две строки при использовании в рабочем режиме
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.php';
(new 
yii\web\Application($config))->run();

Также создайте файл с именем config.php, который будет содержать всю конфигурацию приложения:

<?php
return [
    
'id' => 'micro-app',
    
// basePath (базовый путь) приложения будет каталог `micro-app`
    
'basePath' => __DIR__,
    
// это пространство имен где приложение будет искать все контроллеры
    
'controllerNamespace' => 'micro\controllers',
    
// установим псевдоним '@micro', чтобы включить автозагрузку классов из пространства имен 'micro'
    
'aliases' => [
        
'@micro' => __DIR__,
    ],
];

Info: Несмотря на то, что конфигурация приложения может находиться в файле index.php рекомендуется содержать её в отдельном файле. Таким образом её можно также использовать и для консольного приложения, как показано ниже.

Теперь Ваш проект готов к наполнению кодом. Вам решать какую структуру каталогов проекта Вы выберите, пока Вы сможете видеть пространства имен.

Создание первого контроллера #

Создайте каталог controllers и добавьте туда файл SiteController.php который является контроллером по умолчанию, он будет обрабатывать запрос без пути.

<?php

namespace micro\controllers;

use 
yii\web\Controller;

class 
SiteController extends Controller
{
    public function 
actionIndex()
    {
        return 
'Hello World!';
    }
}

Если Вы хотите использовать другое имя для этого контроллера, Вы можете изменить его настроив yii\base\Application::$defaultRoute. Например для DefaultController будет соответственно 'defaultRoute' => 'default/index'.

На данный момент структура проекта должна выглядеть так:

micro-app/
├── composer.json
├── web/
    └── index.php
└── controllers/
    └── SiteController.php

Если Вы еще не настроили веб-сервер, Вы можете взглянуть на примеры конфигурационных файлов веб-серверов. Другой возможностью является использование команды yii serve которая будет использовать встроенный веб-сервер PHP. Вы можете запустить её из каталога micro-app/ через:

vendor/bin/yii serve --docroot=./web

При открытии URL приложения в браузере, он теперь должен печатать "Hello World!" который был возвращен из SiteController::actionIndex().

Info: В нашем примере мы изменили пространство имен по умолчанию приложения с app на micro, чтобы продемонстрировать что Вы не привязаны к этому имени (в случае, если Вы считали, что это так), а затем скорректировали controllers namespace и установили правильный псевдоним.

Создание REST API #

Чтобы продемонстрировать использование нашей "микроархитектуры" мы создадим простой REST API для сообщений.

Чтобы этот API обслуживал некоторые данные, нам нужна база данных. Добавим конфигурацию подключения базы данных к конфигурации приложения:

'components' => [
    
'db' => [
        
'class' => 'yii\db\Connection',
        
'dsn' => 'sqlite:@micro/database.sqlite',
    ],
],

Info: Для простоты мы используем базу данных sqlite. Дополнительную информацию см. в Руководство по базам данных.

Затем мы создаем миграции базы данных для создания таблицы сообщений. Убедитесь, что у Вас есть отдельный файл конфигурации, как описано выше, нам это нужно для того, чтобы запустить консольные команды описанные ниже. Запуск следующих команд создаст файл миграции базы данных и применит миграцию к базе данных:

vendor/bin/yii migrate/create --appconfig=config.php create_post_table --fields="title:string,body:text"
vendor/bin/yii migrate/up --appconfig=config.php

Создайте каталог models и файл Post.php в этом каталоге. Это код модели:

<?php

namespace micro\models;

use 
yii\db\ActiveRecord;

class 
Post extends ActiveRecord

    public static function 
tableName()
    {
        return 
'{{posts}}';
    }
}

Info: Созданная модель представляет собой класс ActiveRecord, который представляет данные из таблицы posts. Для получения дополнительной информации обратитесь к active record руководству.

Чтобы обслуживать сообщения в нашем API, добавьте PostController в controllers:

<?php

namespace micro\controllers;

use 
yii\rest\ActiveController;

class 
PostController extends ActiveController
{
    public 
$modelClass 'micro\models\Post';

    public function 
behaviors()
    {
        
// удаляем rateLimiter, требуется для аутентификации пользователя
        
$behaviors parent::behaviors();
        unset(
$behaviors['rateLimiter']);
        return 
$behaviors;
    }
}

На этом этапе наш API предоставляет следующие URL-адреса:

  • /index.php?r=post - список всех сообщений
  • /index.php?r=post/view&id=1 - просмотр сообщения с ID 1
  • /index.php?r=post/create - создание сообщения
  • /index.php?r=post/update&id=1 - обновление сообщения с ID 1
  • /index.php?r=post/delete&id=1 - удаление сообщения с ID 1

Начиная с этого момента Вы можете посмотреть следующие руководства для дальнейшего развития своего приложения:

  • API в настоящий момент понимает только данные urlencoded как входные данные, чтобы сделать его настоящим JSON API, Вам необходимо настроить yii\web\JsonParser.
  • Чтобы сделать URL более дружественным, вам необходимо настроить маршрутизацию. См. Руководство по маршрутизации REST о том, как это сделать.
  • Дополнительную информацию см. в разделе Взгляд в будущее.

Зачем реклама?