Использование Yii в качестве микро-framework'а ¶
Yii можно легко использовать без функций включенных в базовый и расширенный шаблоны приложений. Другими словами Yii уже является микро-каркасом. Не требуется иметь структуру каталогов предоставляемую этими шаблонами при работе с Yii.
Это особенно удобно, когда Вам не нужен весь пред-установленный шаблонный код, такой как Assets
или Views
. Одним из таких случаев является создание JSON API. В следующих разделах будет показано, как это сделать.
Установка Yii ¶
Создайте каталог для файлов проекта и смените рабочий каталог на этот путь. В примерах используются команды Unix, но аналогичные команды существуют и в Windows.
mkdir micro-app
cd micro-app
Примечание: Для продолжения требуется немного знаний о 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__,
],
];
Информация: Несмотря на то, что конфигурация приложения может находиться в файле
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()
.
Информация: В нашем примере мы изменили пространство имен по умолчанию приложения с
app
наmicro
, чтобы продемонстрировать что Вы не привязаны к этому имени (в случае, если Вы считали, что это так), а затем скорректировали controllers namespace и установили правильный псевдоним.
Создание REST API ¶
Чтобы продемонстрировать использование нашей "микроархитектуры", мы создадим простой REST API для сообщений.
Чтобы этот API обслуживал некоторые данные, нам нужна база данных. Добавим конфигурацию подключения базы данных к конфигурации приложения:
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'sqlite:@micro/database.sqlite',
],
],
Информация: Для простоты мы используем базу данных 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}}';
}
}
Информация: Созданная модель представляет собой класс 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 о том, как это сделать.
- Дополнительную информацию см. в разделе Взгляд в будущее.