Page Contents

Конфигурация

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

Кроме того, существуют дополнительные параметры конфигурации, которые позволяют вам менять значения и реализации по умолчанию, с помощью тех, которые адаптированы к вашему приложению.

Настройка вашего приложения

Конфигурация обычно хранится в PHP или INI файлах и загружается во время загрузки. CakePHP поставляется с одним файлом конфигурации по умолчанию, но при необходимости вы можете добавлять дополнительные файлы конфигурации и загружать их в код начальной загрузки вашего приложения. Cake\Core\Configure используется для глобальной конфигурации, а классы типа Cache предоставляют config() методы, чтобы сделать конфигурацию простой и прозрачной.

Загрузка дополнительных файлов конфигурации

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

use Cake\Core\Configure;
use Cake\Core\Configure\Engine\PhpConfig;

Configure::config('default', new PhpConfig());
Configure::load('app', 'default', false);
Configure::load('other_config', 'default');

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

Общая конфигурация

Ниже приведено описание переменных и их влияние на приложение CakePHP.

debug

Изменяет вывод отладки CakePHP. false = Режим производства. Не отображаются сообщения об ошибках, ошибки или предупреждения. true = показаны ошибки и предупреждения.

App.namespace

Пространство имён для поиска классов приложений.

Примечание

При изменении пространства имён в вашей конфигурации, вам также понадобится обновить файл composer.json, чтобы использовать это пространство имён. Кроме того, создайте новый автозагрузчик, запустив php composer.phar dumpautoload.

App.baseUrl

Не раскомментируйте это определение, если не планируете использовать Apache mod_rewrite с CakePHP. Не забудьте также удалить файлы .htaccess.

App.base

Базовый каталог, в котором находится приложение. Если false, то он будет обнаружен автоматически. Если не false, убедитесь, что ваша строка начинается с / и не заканчивается символом /. Например, /basedir является допустимым App.base. В противном случае AuthComponent не будет работать должным образом.

App.encoding

Определите, какую кодировку использует ваше приложение. Эта кодировка используется для генерации кодировки в макете и кодирования объектов. Она должна соответствовать значениям кодировки, указанным для вашей базы данных.

App.webroot

Каталог webroot.

App.wwwRoot

Путь к webroot.

App.fullBaseUrl

Полноценное доменное имя (включая протокол) к корню вашего приложения. Это используется при создании абсолютных URL-адресов. По умолчанию это значение генерируется с использованием среды $_SERVER. Однако вы должны определить его вручную для оптимизации производительности или если вас беспокоят люди, манипулирующие заголовком Host. В контексте CLI (из оболочек) fullBaseUrl не может быть прочитан из $_SERVER, так как нет веб-сервера. Вам нужно указать его самостоятельно, если вам нужно создать URL-адреса из оболочки (например, при отправке писем).

App.imageBaseUrl

Веб-путь к каталогу общих изображений в webroot. Если вы используете CDN, вы должны установить это значение для местоположения CDN.

App.cssBaseUrl

Веб-путь к каталогу общих css в webroot. Если вы используете CDN, вы должны установить это значение для местоположения CDN.

App.jsBaseUrl

Веб-путь к каталогу общих js в webroot. Если вы используете CDN, вы должны установить это значение для местоположения CDN.

App.paths

Настроить пути для ресурсов, не связанных с классом. Поддерживает разделы plugins, templates, locales, которые позволяют определять пути для плагинов, просматривать шаблоны и файлы локали соответственно.

Security.salt

Случайная строка, используемая в хешировании. Это значение также используется в качестве соли HMAC при выполнении симметричного шифрования.

Asset.timestamp

Добавляет временную метку, которая является временем последнего изменения конкретного файла в конце URL-адресов файлов ресурсов (CSS, JavaScript, изображений) при использовании правильных помощников. Допустимые значения:

  • (bool) false - Не делает ничего (по умолчанию)

  • (bool) true - Добавляет метку времени, когда debug является true

  • (string) „force“ - Всегда добавляет метку времени.

Настройка базы данных

См. раздел Настройка БД для получения информации о настройке соединений с базой данных.

Конфигурация кэширования

См. раздел Настройка кэширования для получения информации о настройке кэширования.

Конфигурация ошибок и исключений

См. раздел Ошибки и настройка исключений для получения информации о настройке ошибок и обработчиков исключений.

Конфигурация логирования

См. раздел Logging Configuration для получения информации о настройке ведения журнала в CakePHP.

Настройка электронной почты

См. раздел Настройка эл. почты для получения информации о настройке пресетов электронной почты в CakePHP.

Настройка сеанса(сессии)

См. раздел Настройка сессии для получения информации о настройке обработки сеанса в CakePHP.

Конфигурация маршрутизации

См. раздел Настройка маршрутизации для получения дополнительной информации о настройке маршрутизации и создании маршрутов для вашего приложения.

Дополнительные пути классов

Дополнительные пути классов настраиваются через автозагрузчики, используемые вашим приложением. При использовании composer для создания вашего автозагрузчика вы можете сделать следующее, чтобы обеспечить резервные пути для контроллеров в вашем приложении:

"autoload": {
    "psr-4": {
        "App\\Controller\\": "/path/to/directory/with/controller/folders/",
        "App\\": "src/"
    }
}

Вышеописанное установило бы пути как для пространства имен App, так и App\Controller. Будет проверен первый ключ, и если этот путь не содержит класс/файл, будет проверен второй ключ. Вы также можете сопоставить одно пространство имен с несколькими каталогами следующими образом:

"autoload": {
    "psr-4": {
        "App\\": ["src/", "/path/to/directory/"]
    }
}

Плагин, Шаблон просмотра и локальные пути

Поскольку плагины, шаблоны представлений и локали не являются классами, у них не может быть настроен автозагрузчик. CakePHP предоставляет три параметра Configure для настройки дополнительных путей для этих ресурсов. В вашем config/app.php вы можете установить эти переменные:

return [
    // Дополнительная конфигурация
    'App' => [
        'paths' => [
            'plugins' => [
                ROOT . DS . 'plugins' . DS,
                '/path/to/other/plugins/'
            ],
            'templates' => [
                APP . 'Template' . DS,
                APP . 'Template2' . DS
            ],
            'locales' => [
                APP . 'Locale' . DS
            ]
        ]
    ]
];

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

Настройка интонации

See the Inflection Configuration docs for more information.

Переменные среды (окружения)

Многие современные поставщики облачных вычислений, такие как Heroku, позволяют вам определять переменные среды для данных конфигурации. Вы можете настроить CakePHP через переменные среды в стиле 12factor app style. Переменные среды позволяют вашему приложению требовать меньшего количества состояний, что упрощает управление вашим приложением при развертывании в нескольких средах.

Как вы можете видеть в вашем app.php, функция env() используется для чтения конфигурации из среды и создания конфигурации приложения. CakePHP использует DSN строки для баз данных, журналов, почтовых транспортов и конфигурации кеша, позволяющие легко изменять эти библиотеки в каждой среде.

Для локальной разработки CakePHP использует dotenv, чтобы обеспечить легкую локальную разработку с использованием переменных среды. В приложении вы увидите config/.env.default. Скопировав этот файл в config/.env и настроив значения, вы можете настроить ваше приложение.

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

После того, как переменные среды установлены, вы можете использовать env() для чтения данных из среды (окружения):

$debug = env('APP_DEBUG', false);

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

Изменено в версии 3.5.0: Поддержка библиотеки dotenv была добавлена в скелет приложения.

Настроить класс

class Cake\Core\Configure

Класс Configure CakePHP может использоваться для хранения и извлечения определённых приложений или значений времени выполнения. Будьте осторожны, этот класс позволяет хранить что-либо в нём, а затем использовать это в любой другой части вашего кода: это может соблазнить разрушить шаблон MVC, разработанный CakePHP. Основная задача настройки класса - хранить централизованные переменные, которые могут быть разделены между многими объектами. Не забудьте попытаться жить по «конвенции по конфигурации», и вы не разрушите структуру MVC, которую предоставляет CakePHP.

Запись данных конфигурации

static Cake\Core\Configure::write($key, $value)

Используйте write() для хранения данных в конфигурации приложения:

Configure::write('Company.name','Pizza, Inc.');
Configure::write('Company.slogan','Pizza for your body and soul');

Примечание

dot notation, используемый в параметре $key, может использоваться для организации ваших настроек конфигурации в логических группах.

Вышеприведённый пример также может быть записан одним вызовом:

Configure::write('Company', [
    'name' => 'Pizza, Inc.',
    'slogan' => 'Pizza for your body and soul'
]);

Вы можете использовать Configure::write('debug', $bool) для переключения между режимами отладки и производства на лету. Это особенно удобно для взаимодействия JSON, где отладочная информация может вызвать проблемы с анализом.

Чтение данных конфигурации

static Cake\Core\Configure::read($key = null, $default = null)

Используется для чтения данных конфигурации из приложения. Если ключ предоставляется, данные возвращаются. Используя наши вышеизложенные примеры из write(), мы можем прочитать возвращаемые данные:

// Возвращает 'Pizza Inc.'
Configure::read('Company.name');

// Возвращает 'Pizza for your body and soul'
Configure::read('Company.slogan');

Configure::read('Company');
// Возвращает:
['name' => 'Pizza, Inc.', 'slogan' => 'Pizza for your body and soul'];

// Возвращает 'fallback' как Company.nope не определен.
Configure::read('Company.nope', 'fallback');

Если $key оставлено в null, все значения в Configure будут возвращены.

Изменено в версии 3.5.0: Параметр $default был добавлен в 3.5.0

static Cake\Core\Configure::readOrFail($key)

Читает данные конфигурации так же, как Cake\Core\Configure::read, но ожидает найти пару ключ/значение. Если запрошенная пара не существует, будет выброшено RuntimeException:

Configure::readOrFail('Company.name');    // Принесёт: 'Pizza, Inc.'
Configure::readOrFail('Company.geolocation');  // Бросает исключение

Configure::readOrFail('Company');

// Принесёт:
['name' => 'Pizza, Inc.', 'slogan' => 'Pizza for your body and soul'];

Добавлено в версии 3.1.7: Configure::readOrFail() был добавлен в 3.1.7

Проверка наличия определенных данных конфигурации

static Cake\Core\Configure::check($key)

Используется для проверки наличия ключа/пути и имеет ненулевое значение:

$exists = Configure::check('Company.name');

Удаление данных конфигурации

static Cake\Core\Configure::delete($key)

Используется для удаления информации из конфигурации приложения:

Configure::delete('Company.name');

Чтение и удаление данных конфигурации

static Cake\Core\Configure::consume($key)

Прочтите и удалите ключ из Configure. Это полезно, если вы хотите объединить чтение и удаление значений в одной операции.

Чтение и запись файлов конфигурации

static Cake\Core\Configure::config($name, $engine)

CakePHP поставляется с двумя встроенными файловыми системами. Cake\Core\Configure\Engine\PhpConfig способен читать файлы конфигурации PHP в том же формате, который исторически читал Configure. Cake\Core\Configure\Engine\IniConfig способен читать ini-файлы конфигурации. Подробнее о спецификациях ini-файлов см. в PHP documentation. Чтобы использовать основной конфигурационный движок, вам необходимо прикрепить его к Configure с помощью Configure::config():

use Cake\Core\Configure\Engine\PhpConfig;

// Чтение конфигурационных файлов из конфигурации
Configure::config('default', new PhpConfig());

// Прочитайте конфигурационные файлы с другого пути
Configure::config('default', new PhpConfig('/path/to/your/config/files/'));

У вас может быть несколько подключенных к Configure конфигураций, каждая из которых считывает разные типы или источники файлов конфигурации. Вы можете взаимодействовать с подключенными двигателями, используя несколько других методов в Configure. Чтобы проверить, какие алиасы двигателя подключены, вы можете использовать Configure::configured():

// Получите массив псевдонимов для подключенных двигателей.
Configure::configured();

// Проверьте, подключен ли какой-либо конкретный двигатель
Configure::configured('default');
static Cake\Core\Configure::drop($name)

Вы также можете удалить подключенные двигатели. Configure::drop('default') удалит псевдоним двигателя по умолчанию. Любые будущие попытки загрузить файлы конфигурации с этим движком не сработают

Configure::drop('default');

Загрузка файлов конфигурации

static Cake\Core\Configure::load($key, $config = 'default', $merge = true)

После того, как вы подключили конфигурационный движок к Configure, вы можете загрузить файлы конфигурации:

// Загрузите файл my_file.php с помощью объекта 'default', движка.
Configure::load('my_file', 'default');

Загруженные файлы конфигурации объединяют свои данные с существующей конфигурацией времени выполнения в Configure. Это позволяет вам перезаписывать и добавлять новые значения в существующую конфигурацию времени выполнения. Установив $merge в true, значения не будут перезаписывать существующую конфигурацию.

Создание или изменение файлов конфигурации

static Cake\Core\Configure::dump($key, $config = 'default', $keys = [])

Сбрасывает все или некоторые данные в Configure в файл или систему хранения, поддерживаемые механизмом конфигурации. Формат сериализации определяется механизмом конфигурации, прикрепленным в виде $config. Например, если „по умолчанию“ движком является Cake\Core\Configure\Engine\PhpConfig, сгенерированный файл будет файлом конфигурации PHP, загружаемым с помощью Cake\Core\Configure\Engine\PhpConfig.

Учитывая, что движок „по умолчанию“ является экземпляром PhpConfig, сохраните все данные в Configure в файле my_config.php:

Configure::dump('my_config', 'default');

Сохранять только конфигурацию обработки ошибок:

Configure::dump('error', 'default', ['Error', 'Exception']);

Configure::dump() можно использовать для изменения или перезаписывания файлов конфигурации, которые читаются с помощью Configure::load().

Сохранение конфигурации времени выполнения

static Cake\Core\Configure::store($name, $cacheConfig = 'default', $data = null)

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

// Сохраните текущую конфигурацию в ключе 'user_1234' в кеше 'default'.
Configure::store('user_1234', 'default');

Сохранённые данные конфигурации сохраняются в конфигурации именованного кеша. Для получения дополнительной информации о кешировании см. документацию по кешированию Кэширование.

Восстановление конфигурации времени выполнения

static Cake\Core\Configure::restore($name, $cacheConfig = 'default')

Как только вы сохраните конфигурацию во время выполнения, вам, вероятно, потребуется восстановить её, чтобы вы снова могли получить к ней доступ. Configure::restore() именно это и делает:

// Восстановить конфигурацию времени выполнения из кеша.
Configure::restore('user_1234', 'default');

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

Конфигурационные двигатели

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

По умолчанию ваше приложение будет использовать PhpConfig.

Загрузочный CakePHP

Если у вас есть какие-либо дополнительные потребности в настройке, вы должны добавить их в файл config/bootstrap.php вашего приложения. Этот файл подключается перед каждым запросом и командой CLI.

Этот файл идеально подходит для ряда обычных задач начальной загрузки:

  • Определение удобных функций.

  • Объявление констант.

  • Определение конфигурации кеша.

  • Определение конфигурации ведения журнала.

  • Загрузка пользовательских интонаций (inflections).

  • Загрузка файлов конфигурации.

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

Application::bootstrap()

В дополнение к config/bootstrap.php, который должен использоваться для настройки проблем низкого уровня вашего приложения, вы также можете использовать хук-метод Application::bootstrap() для загрузки/инициализации плагинов, и присоединить глобальных слушателей событий:

// в src/Application.php
namespace App;

use Cake\Core\Plugin;
use Cake\Http\BaseApplication;

class Application extends BaseApplication
{
    public function bootstrap()
    {
        // Вызовите родителя для `require_once` config/bootstrap.php
        parent::bootstrap();

        Plugin::load('MyPlugin', ['bootstrap' => true, 'routes' => true]);
    }
}

Загрузка плагинов/событий в Application::bootstrap() делает Controller Integration Testing проще, поскольку события и маршруты будут переработаны для каждого метода тестирования.

Отключение общих таблиц

При использовании универсальных классов таблиц - также называемых автоматическими таблицами - когда полезно быстро создавать новые приложения и модели выпечки, общий класс таблицы может затруднить отладку, в некоторых сценариях.

Вы можете проверить, был ли какой-либо запрос из класса Generic через DebugKit выпущен через панель SQL в DebugKit. Если у вас по-прежнему возникают проблемы с диагностикой проблемы, которая может быть вызвана автоматическими таблицами, вы можете создать исключение, когда CakePHP неявно использует общий Cake\ORM\Table вместо вашего конкретного класса:

// В вашем bootstrap.php
use Cake\Event\EventManager;
use Cake\Network\Exception\InternalErrorException;

$isCakeBakeShellRunning = (PHP_SAPI === 'cli' && isset($argv[1]) && $argv[1] === 'bake');
if (!$isCakeBakeShellRunning) {
    EventManager::instance()->on('Model.initialize', function($event) {
        $subject = $event->getSubject();
        if (get_class($subject === 'Cake\ORM\Table') {
            $msg = sprintf(
                'Missing table class or incorrect alias when registering table class for database table %s.',
                $subject->getTable());
            throw new InternalErrorException($msg);
        }
    });
}