В то время как соглашения устраняют необходимость настройки всего 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.
Изменяет вывод отладки CakePHP. false
= Режим производства. Не отображаются
сообщения об ошибках, ошибки или предупреждения. true
= показаны ошибки и предупреждения.
Пространство имён для поиска классов приложений.
Примечание
При изменении пространства имён в вашей конфигурации, вам также
понадобится обновить файл composer.json, чтобы использовать
это пространство имён. Кроме того, создайте новый автозагрузчик,
запустив php composer.phar dumpautoload
.
Не раскомментируйте это определение, если не планируете использовать Apache mod_rewrite с CakePHP. Не забудьте также удалить файлы .htaccess.
Базовый каталог, в котором находится приложение. Если false
,
то он будет обнаружен автоматически. Если не false
, убедитесь,
что ваша строка начинается с / и не заканчивается символом /.
Например, /basedir является допустимым App.base. В противном случае
AuthComponent не будет работать должным образом.
Определите, какую кодировку использует ваше приложение. Эта кодировка используется для генерации кодировки в макете и кодирования объектов. Она должна соответствовать значениям кодировки, указанным для вашей базы данных.
Каталог webroot.
Путь к webroot.
Полноценное доменное имя (включая протокол) к корню вашего приложения.
Это используется при создании абсолютных URL-адресов. По умолчанию это значение
генерируется с использованием среды $_SERVER. Однако вы должны определить его
вручную для оптимизации производительности или если вас беспокоят люди, манипулирующие
заголовком Host
.
В контексте CLI (из оболочек) fullBaseUrl не может быть прочитан из $_SERVER,
так как нет веб-сервера. Вам нужно указать его самостоятельно, если вам нужно создать
URL-адреса из оболочки (например, при отправке писем).
Веб-путь к каталогу общих изображений в webroot. Если вы используете CDN, вы должны установить это значение для местоположения CDN.
Веб-путь к каталогу общих css в webroot. Если вы используете CDN, вы должны установить это значение для местоположения CDN.
Веб-путь к каталогу общих js в webroot. Если вы используете CDN, вы должны установить это значение для местоположения CDN.
Настроить пути для ресурсов, не связанных с классом. Поддерживает разделы
plugins
, templates
, locales
, которые позволяют определять пути
для плагинов, просматривать шаблоны и файлы локали соответственно.
Случайная строка, используемая в хешировании. Это значение также используется в качестве соли HMAC при выполнении симметричного шифрования.
Добавляет временную метку, которая является временем последнего изменения конкретного файла в конце 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 была добавлена в скелет приложения.
Cake\Core\
Configure
¶Класс Configure CakePHP может использоваться для хранения и извлечения определённых приложений или значений времени выполнения. Будьте осторожны, этот класс позволяет хранить что-либо в нём, а затем использовать это в любой другой части вашего кода: это может соблазнить разрушить шаблон MVC, разработанный CakePHP. Основная задача настройки класса - хранить централизованные переменные, которые могут быть разделены между многими объектами. Не забудьте попытаться жить по «конвенции по конфигурации», и вы не разрушите структуру MVC, которую предоставляет CakePHP.
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, где отладочная информация может вызвать проблемы с анализом.
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
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
Cake\Core\Configure::
check
($key)¶Используется для проверки наличия ключа/пути и имеет ненулевое значение:
$exists = Configure::check('Company.name');
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');
Cake\Core\Configure::
drop
($name)¶Вы также можете удалить подключенные двигатели. Configure::drop('default')
удалит псевдоним двигателя по умолчанию. Любые будущие попытки загрузить файлы
конфигурации с этим движком не сработают
Configure::drop('default');
Cake\Core\Configure::
load
($key, $config = 'default', $merge = true)¶После того, как вы подключили конфигурационный движок к Configure, вы можете загрузить файлы конфигурации:
// Загрузите файл my_file.php с помощью объекта 'default', движка.
Configure::load('my_file', 'default');
Загруженные файлы конфигурации объединяют свои данные с существующей конфигурацией
времени выполнения в Configure. Это позволяет вам перезаписывать и добавлять новые
значения в существующую конфигурацию времени выполнения. Установив $merge
в
true
, значения не будут перезаписывать существующую конфигурацию.
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()
.
Cake\Core\Configure::
store
($name, $cacheConfig = 'default', $data = null)¶Вы также можете сохранять значения конфигурации времени выполнения для использования в будущем запросе. Поскольку configure только запоминает значения для текущего запроса, вам необходимо сохранить любую измененную конфигурационную информацию, если вы хотите использовать ее в последующих запросах:
// Сохраните текущую конфигурацию в ключе 'user_1234' в кеше 'default'.
Configure::store('user_1234', 'default');
Сохранённые данные конфигурации сохраняются в конфигурации именованного кеша. Для получения дополнительной информации о кешировании см. документацию по кешированию Кэширование.
Cake\Core\Configure::
restore
($name, $cacheConfig = 'default')¶Как только вы сохраните конфигурацию во время выполнения, вам, вероятно,
потребуется восстановить её, чтобы вы снова могли получить к ней доступ.
Configure::restore()
именно это и делает:
// Восстановить конфигурацию времени выполнения из кеша.
Configure::restore('user_1234', 'default');
При восстановлении информации о конфигурации важно восстановить её с помощью того же ключа и конфигурации кэша, которая использовалась для её хранения. Восстановленная информация объединяется поверх существующей конфигурации времени выполнения.
CakePHP предоставляет возможность загружать файлы конфигурации из нескольких разных источников и включает в себя подключаемую систему для создания собственных механизмов конфигурации. Встроенные двигатели конфигурации:
По умолчанию ваше приложение будет использовать PhpConfig
.
Если у вас есть какие-либо дополнительные потребности в настройке, вы должны добавить их в файл config/bootstrap.php вашего приложения. Этот файл подключается перед каждым запросом и командой CLI.
Этот файл идеально подходит для ряда обычных задач начальной загрузки:
Определение удобных функций.
Объявление констант.
Определение конфигурации кеша.
Определение конфигурации ведения журнала.
Загрузка пользовательских интонаций (inflections).
Загрузка файлов конфигурации.
Возможно, возникнет соблазн разместить там функции форматирования, чтобы использовать их в своих контроллерах. Как вы увидите в разделах Контроллеры и and Представления есть более эффективные способы добавления пользовательской логики в ваше приложение.
В дополнение к 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);
}
});
}