Входной скрипт и настройки
Каждый запрос к сайту приходит в один файл — входной скрипт web/index.php. Он читает настройки из папки config и запускает приложение. Понимать эти два места нужно, чтобы знать, где включается та или иная возможность.
Входной скрипт
Файл web/index.php уже есть в проекте:
<?php
// web/index.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/web.php';
(new yii\web\Application($config))->run();Две константы включают режим разработки, затем подключаются библиотеки, читается массив настроек и создаётся объект приложения. Метод run() находит нужный контроллер и отправляет ответ.
Файл настроек
Настройки сайта лежат в config/web.php. Это обычный файл PHP, который возвращает массив:
// config/web.php
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'name' => 'Мой блог',
'language' => 'ru-RU',
'components' => [
// службы приложения
],
'params' => $params,
];
return $config;Ключ name задаёт название сайта — стандартный макет показывает его в шапке. Ключ language задаёт язык сообщений фреймворка: после этой правки ошибки форм будут на русском.
Компоненты
Компонент — это служба приложения с именем: база данных, кеш, почта. Компоненты перечислены в разделе components:
// config/web.php
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
],
'db' => $db,
],Ключ массива — имя компонента, class — класс, остальные ключи — свойства этого класса. К компоненту обращаются через объект приложения Yii::$app по имени:
Yii::$app->cache; // кеш
Yii::$app->db; // подключение к базе данных
Yii::$app->request; // текущий запрос
Yii::$app->user; // текущий пользовательОбъект компонента создаётся при первом обращении, поэтому лишние компоненты сайт не замедляют.
Свои параметры
Значения, нужные в разных местах сайта, записывают в config/params.php:
// config/params.php
return [
'adminEmail' => 'admin@example.com',
'postsPerPage' => 10,
];В любом месте кода параметр читают так: Yii::$app->params['postsPerPage'].
Другие файлы настроек
| Файл | Назначение |
|---|---|
config/web.php | Настройки сайта |
config/console.php | Настройки консольных команд |
config/db.php | Подключение к базе данных |
config/params.php | Свои параметры |
Частая ошибка
У сайта и у консоли настройки разные. Компонент, добавленный только в config/web.php, в консольной команде недоступен: обращение к нему закончится ошибкой Unknown component ID. Если служба нужна в обоих местах, опишите её и в config/console.php.