Конфигурирование приложения

Первым этапом разработки приложения, на мой взгляд, является начальное конфигурирование. С него и начнём.

Конфигурирование Yii

Первым будем конфигурировать приложение на Yii. Так как мы установили advanced шаблон в качестве основы, то конфигурация разделилась на  common, frontend и backend. На данный момент нас будут интересовать конфигурационные файлы frontend, поскольку эта часть отвечает за пользовательский интерфейс, которым в начале мы и будем заниматься, а также common, так как здесь располагается конфигурация актуальная для всего приложения, например, подключение к базе данных.

В каждой из папок frontend/config и common/config находится набор следующих файлов:

  • bootstrap.php — «Предпусковые» настройки для окружения
  • main.php — основные настройки
  • main-local.php — основные настройки для локального сервера
  • params.php — параметры
  • params-local.php — параметры для локального сервера
  • test.php — настроки для тестирования
  • test-local.php — настройки для тестирования для локального сервера

Конфигурационные файлы используют язык PHP, и представляют из себя многомерные массивы, возвращаемые (return) из данных файлов.

На данный момент мы не будем углубляться в особенности каждого файла, а начнём с самого распространённого вопроса — конфигурирование подключения к базе данных. Нас будет интересовать файл common/config/main-local.php

<?php
return [
    'components' => [
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ],
        ...
    ],
];

В значении для ключа dsn находится строка подключения к базе (data source name). Указываем название базы данных в параметре dbname, если база находится не на том же сервере, то указываем host.

Указываем username и password пользователя для подключения к БД.

Как правило, кодировка БД UTF-8, но если Ваша не в данной кодировке, то не забудьте указать нужную кодировку в charset. Для подключения к базе будем использовать стандартный класс yii\db\Connection, который указан в значении для ключа class.

Конфигурирование Symfony

Для данного фреймворка конфигурирование основного приложения несколько проще. Все основные конфигурационные файлы сосредоточены в папке app/config. Для конфигурирования приложения используется язык YAML, поэтому конфигурационные файлы имеют расширение *.yml.

Основные конфигурационные файлы:

  • config.yml — главный файл конфигурации приложения
  • config_dev.yml — файл с особенностями конфигурации для development окружения (окружение разработчика)
  • config_prod.yml — файл с особенностями конфигурации для production («боевого») окружения
  • config_test.yml — файл с особенностями конфигурации для тестового окружения
  • parameters.yml — файл со значениями параметров
  • security.yml — файл с настройками безопасности приложения

Как выше было указано, основная конфигурация приложения сосредоточена в файле config.yml. Если его открыть, то можно заметить, что часть значений указана в виде переменных, например, «%database_name%». Значения данных переменных указываются в файлах с параметрами, часть переменных из файла config.yml задаются в файле parameters.yml. Зададим в файле parameters.yml значения для подключения к базе данных. По-умолчанию при установке мы видим такие значения:

parameters:
    database_host: 127.0.0.1
    database_port: null
    database_name: symfony
    database_user: root
    database_password: null

Все названия переменных интуитивно понятны, поэтому легко подставить свои значения.

Поскольку наше приложение находится в состоянии разработки, то будет логично использовать при этом dev окружение, в котором нам будет доступен Symfony Profiler — инструмент для отладки приложения. Для этого нужно указать в настройках сервера, чтобы индексным файлом нашего проекта был app_dev.php. Так как у нас Apache, то нам нужно сделать данную поправку в файле web/.htaccess. Более подробно о настройке Apache, а также о настройке Nginx можно почитать в документации:  http://symfony.com/doc/current/setup/web_server_configuration.html

Конфигурирование Laravel

Конфигурационные файлы данного фреймворка располагаются в папке config. Каждый файл носит название группы тех настроек, которые содержит. Например, database.php содержит настройки подключения к базе данных. Конфигурационные файлы, как и в Yii, используют PHP и содержат в себе многомерный массив. Каждая подгруппа настроек (а в некоторых случаях конкретная настройка) в файле содержит обильные комментарии, разъясняющие основную суть того, что настраивает данная подгруппа (или конкретная настройка). Особенность конфигурирования приложения в Laravel заключается в том, что в конфигурационных файлах вроде database.php для основных настроек значения задаются через функцию env(). Данная функция принимает два параметра:

  1. key (например, ‘DB_DATABASE’) — это название переменной из .env файла
  2. default — значение по-умолчанию, если в .env такой переменной не существует

Файл .env представляет собой ini-файл, в котором хранятся пары ключ-значение. Хранится он в корневой папке сайта. Как правило данный файл добавляется в .gitignore, так как предполагается, что на разных серверах данные настройки могут отличаться. Для каждого окружения можно создать свой собственный файл с конфигурацией, например, .env.production. Данные файлы добавляются в Git, и при разворачивании проекта в указанной среде нужно лишь переименовать необходимый файл в .env. Также, например, при запуске unit-тестов можно с помощью параметра —env=testing указать в каком окружении выполнять тесты и, соответственно, какой файл для этого использовать (в данном случае будет использоваться .env.testing). Более подробно об этом можно узнать в официальной документации: https://laravel.com/docs/5.4/configuration

Зададим значения по-умолчанию для подключения к базе данных в файле database.php, а также укажем их в .env.

database.php

<?php
'connections' => [

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
?>

Здесь нас будут интересовать группа параметров connections, подгруппа mysql, ключи: database, username, password.

.env

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

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