Конфігурація додатка на cakephp 3, блог про cakephp

Налаштування програми

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

Завантаження додаткових файлів конфігурації

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

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

Загальна конфігурація

Нижче наведено опис змінних середовища та їх вплив на ваше додаток CakePHP.

Debug Змінює висновок налагоджувальної інформації. False = Відсутні повідомлення про помилки та попередження. True = Режим налагодження, при якому показуються помилки і попередження. App.namespace Простір імен, в якому знаходяться класи додатки.

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

Так само, до загальної конфігурації відносяться наступні розділи:

  • Конфігурація бази даних;
  • Конфігурація кешування;
  • Налаштування обробки помилок і виключень;
  • Конфігурація протоколювання;
  • Налаштування електронної пошти;
  • Конфігурація сесії;
  • Конфігурація зміни форми слова (Inflector);
  • Конфігурація маршрутизації.

Додаткові шляхи до класів

Додаткові шляхи до класів налаштовуються через Автозавантажувач вашого застосування. При використанні Composer для генерації Автозавантажувач, щоб надати запасні шляхи для контролерів, необхідно зробити наступне (файл composer.json):

Запис вище встановить шляху для просторів імен App та App \ Controller. Спочатку відбудеться перевірка першого ключа і якщо цей шлях не містить шуканий клас / файл, буде проведений пошук по другому ключу. Також допускається зіставлення одного простору імен з декількома каталогами:

Шляхи для плагіна, шаблону уявлення і локалізації

Оскільки плагіни, шаблони і локалізація не є класами, у них не може бути налаштований автозавантажувач. CakePHP надає три змінні в конфігурації якщо необхідно налаштувати додаткові шляхи для цих ресурсів. У config / app.php ви можете скорегувати відповідні змінні:

клас Configure

Клас CakePHP Configure може використовуватися для зберігання і вилучення конкретних значень додатки або середовища виконання. Будьте обережні, цей клас дозволяє зберігати в ньому що завгодно, а потім використовувати це в будь-який інший частини вашого коду: вірне спокуса порушити розроблений в CakePHP шаблон MVC. Головна мета класу Configure - зберігати централізовані змінні, які можуть спільно використовуватися різними об'єктами. Не забувайте дотримуватися цього принципу і ви не порушите створену розробниками структуру MVC.

Ви можете отримати доступ до класу Configure з будь-якої точки прикладання, написавши наступний код:

Запис даних конфігурації

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

Використовуйте write () для зберігання даних в конфігурації програми:

Зверніть увагу! Точкова нотація, використовувана в параметрі $ key. може використовуватися для організації налаштувань конфігурації в логічні групи.

Вищенаведений приклад також може бути написаний в одному виклику:

Ви можете використовувати Configure :: write ( 'debug', $ bool) для перемикання між режимами налагодження і виробництва, що називається - на льоту. Це особливо зручно для взаємодії JSON, коли налагоджувальна інформація може викликати проблеми з розбором синтаксису.

Читання даних конфігурації

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

Використовується для читання даних конфігурації з програми. Повертаються дані за вказаною ключу. Для вищенаведеного прикладу, де використовувався метод write (), ми можемо прочитати записані дані в такий спосіб:

Якщо параметр $ key не вказувати, то метод поверне всі значення Configure.

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

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

Увага. нове у версії 3.1.7: Configure :: readOrFail () додано починаючи з версії 3.1.7

Перевірка того, чи визначено дані конфігурації

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

Використовується для перевірки наявності ключа / шляху, повертає true або false:

Видалення даних конфігурації

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

Використовується для видалення інформації з конфігурації програми:

Читання і подальше видалення конфігураційних даних

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

Читання і видалення ключа з конфігурації. Це корисно, коли ви хочете об'єднати читання і видалення значень в одній операції.

Читання і запис конфігураційних файлів

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

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

static Cake \ Core \ Configure :: drop ($ name)

Ви також можете видаляти підключення механізми. Configure :: drop ( 'default') видалить механізм, який має псевдонім 'default'. Будь-які подальші спроби завантажити конфігураційні файли для цього механізму - потерплять невдачу:

Завантаження файлів конфігурації

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

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

Завантажені конфігураційні файли об'єднують свої дані з існуючої в Configure конфігурацією. Це дозволяє перезаписувати або додавати нові значення в існуючі налаштування програми. Встановивши $ merge в true, значення не будуть перезаписані а об'єднаються з існуючою конфігурацією.

Створення або зміна файлів конфігурації

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

Вивантажує всі або частину даних з Configure в файл або систему зберігання, підтримувану механізмом конфігурації. Формат сериализации визначається підключеним механізмом, псевдонім якого вказується в $ config. Наприклад, якщо псевдонім «default» механізму Cake \ Core \ Configure \ Engine \ PhpConfig. то згенерований файл буде файлом конфігурації PHP, завантажуваних за допомогою Cake \ Core \ Configure \ Engine \ PhpConfig

Якщо механізм 'default' є екземпляром PhpConfig. Те все дані конфігурації Configure будуть збережені у файлі my_config.php:

Чи збереже тільки конфігурацію обробки помилок:

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

Збереження конфігурації часу виконання

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

Ви також можете зберегти значення конфігурації часу виконання (Runtime) для використання в майбутньому запиті. Оскільки Configure запам'ятовує значення тільки для поточного запиту, вам потрібно буде зберігати будь-яку змінену конфігураційну інформацію, якщо потрібно використовувати її в подальшому:

Дані зберігаються в кеші згідно його конфігурації.

Відновлення збереженої Runtime конфігурації

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

Після того як ви зберегли значення конфігурації часу виконання, вам, ймовірно, може знадобиться їх відновити, для подальшого використання. Configure :: restore () робить саме це:

При відновленні інформації про конфігурацію важливо пам'ятати, що відновлення її відбувається за допомогою того ж ключа і найменування конфігурації кеша, які були використані для її збереження. Відновлена ​​інформація об'єднується поверх існуючої Runtime конфігурації.

Створення власних конфігураційних механізмів

Оскільки конфігурація є розширюваної частиною CakePHP, ви можете створювати власні її механізми в своїх додатках і плагінах. Створювані механізми повинні реалізовувати Cake \ Core \ Configure \ ConfigEngineInterface. Цей інтерфейс має на увазі створення методу читання, як єдиного необхідного методу. Якщо ви хочете використовувати конфігураційні файли XML, то можете створити простий механізм конфігурації Xml для свого застосування:

У config / bootstrap.php ви можете підключити новостворений движок і далі його використовувати:

Метод read () в модулі конфігурації повинен повертати масив інформації про конфігурацію, що містить ресурсну з ім'ям $ key.

Визначає інтерфейс, використовуваний класами, які читають ці зміни і зберігають їх в Configure

Parameters: $ key (string) - Ім'я ключа або ідентифікатор для завантаження.

Цей метод повинен завантажувати / парсити конфігураційні дані, ідентифіковані ключем $ key і повертати масив даних з конфігураційного файлу.

Cake \ Core \ Configure \ ConfigEngineInterface :: dump ($ key, array $ data)

Parameters: $ key (string) - Ідентифікатор (назва файлу), куди буде проводитися запис; $ Data (array) - дані для дампа (записи).

Цей метод повинен зберігати надані дані конфігурації в файл з назвою ідентифікованим по ключу $ key.

Вбудовані конфігураційні механізми

Файли конфігурації PHP

Завантаження файлу конфігурації (customConfig.php) відбувається вставкою в config / bootstrap.php наступного коду:

Файли конфігурації Ini

  • точкові поділу значень будуть перетворені в масиви;
  • значення типу логічний, такі як «on» і «off», перетворюються в логічні значення «true» і «false».

Приклад змісту файлу ini наведено нижче:

Цей приклад ini-файлу, призведе до тих самих кінцевим конфігураційним даними, що і наведений вище приклад PHP. Структури масивів можуть бути створені або через розділені крапками значення, або через секції. Секції так само можуть містити розділені крапками ключі, для більш глибокого вкладення.

Файли конфігурації Json

Дозволяє виконувати дамп / читання конфігураційних файлів .json, інформація в яких зберігається у вигляді JSON-кодованих рядків.

Приклад змісту файлу json наведено нижче:

Початкова завантаження CakePHP (Bootstrapping)

Якщо у вас є додаткові вимоги до конфігурації, їх необхідно додати в файл config / bootstrap.php вашого застосування. Підключення файлу config / bootstrap.php виконується перед кожним запитом і командою через CLI.

Цей файл ідеальний для ряду звичайних завдань початкового завантаження:

Може виникнути спокуса розмістити тут функції форматування, щоб використовувати їх в контролерах. Як ви побачите в розділах «Контролери» (Controllers) і «Уявлення» (Views), є кращі способи додавання користувальницької логіки в вашу програму.

Application :: bootstrap ()

На додаток до файлу config / bootstrap.php. який слід використовувати для низькорівневих налаштувань програми, ви також можете використовувати хук метод Application :: bootstrap () для завантаження / ініціалізації плагінів і приєднання глобальних слухачів подій:

змінні середовища

Деякі з сучасних постачальників хмарних рішень, таких як Heroku, дозволяють визначати змінні середовища. Визначивши змінні середовища, ви можете налаштувати свій проект CakePHP як додаток з 12 факторами (12factor app). Дотримуючись інструкцій 12factor app. ви можете створити додаток без стану (stateless) і спростити його розгортання. Це означає, наприклад, що якщо необхідно змінити підключення до бази даних, вам просто потрібно змінити змінну DATABASE_URL в конфігурації хоста без необхідності її зміни у вихідному коді.

Виходячи з вищевикладеного, в файлі app.php. ви можете бачити наступні змінні:

  • DEBUG (0 or 1);
  • APP_ENCODING (ie UTF-8);
  • APP_DEFAULT_LOCALE (ie en_US);
  • SECURITY_SALT;
  • CACHE_DEFAULT_URL (ie File: ///? Prefix = myapp_serialize = truetimeout = 3600path = .. / tmp / cache /);
  • CACHE_CAKECORE_URL (ie File: ///? Prefix = myapp_cake_core_serialize = truetimeout = 3600path = .. / tmp / cache / persistent /);
  • CACHE_CAKEMODEL_URL (ie File: ///? Prefix = myapp_cake_model_serialize = truetimeout = 3600path = .. / tmp / cache / models /);
  • EMAIL_TRANSPORT_DEFAULT_URL (ie smtp: // user: password @ hostname: port? Tls = nullclient = nulltimeout = 30);
  • DATABASE_URL (ie mysql: // user: pass @ db / my_app);
  • DATABASE_TEST_URL (ie mysql: // user: pass @ db / test_my_app);
  • LOG_DEBUG_URL (ie file: ///? Levels [] = noticelevels [] = infolevels [] = debugfile = debugpath = .. / logs /);
  • LOG_ERROR_URL (ie file: ///? Levels [] = warninglevels [] = errorlevels [] = criticallevels [] = alertlevels [] = emergencyfile = errorpath = .. / logs /).

Як ви можете бачити в прикладах, ми визначаємо конфігурацію деяких опцій як DSN-рядки (DSN - ім'я джерела даних). Це стосується баз даних, журналів, транспорту електронної пошти і конфігурацій кеша.

Якщо змінні середовища вами не визначені, CakePHP буде використовувати значення, вказані в файлі app.php. Ви можете використовувати бібліотеку php-dotenv для використання змінних середовища в локальній розробці. Додаткові відомості можна подивитися в інструкціях Readme самої бібліотеки.

Відключення загальних таблиць

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

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