Створення та запуск CakePHP проекту за допомогою ServBay
ServBay — це локальне середовище для веб-розробки з підтримкою macOS і Windows, яке включає в себе інтегровані середовища PHP, Node.js, Python, Go, Java та інші, а також сервісні бази даних — MySQL, PostgreSQL, MongoDB, Redis та інші, разом із веб-сервером Caddy або Nginx. Це сучасна платформа, яка значно спрощує процес запуску та керування локальними проектами для розробників.
У цій статті ви дізнаєтеся, як створити, налаштувати та запустити проект на CakePHP у середовищі ServBay. CakePHP — популярний фреймворк для PHP, який дотримується архітектури MVC (модель—представлення—контролер), відомий своєю швидкістю розробки, потужною системою ORM і вбудованою безпекою. З ServBay ви миттєво почнете продуктивно працювати з CakePHP.
Що таке CakePHP?
CakePHP — це open-source фреймворк для веб-розробки на PHP, який пропонує структуровану основну архітектуру для швидкого створення додатків без втрати гнучкості. Він працює за принципом «конвенція понад конфігурацію» і суттєво спрощує типові завдання розробника.
Основні особливості й переваги CakePHP
- MVC-архітектура: Чітка структура коду для простої підтримки і розширення.
- Швидка розробка: Інструмент командного рядка (Bake) для автоматичної генерації коду.
- Потужний ORM: Спрощена робота з базами даних та підтримка різних систем.
- Вбудована безпека: Захист від CSRF-атак, SQL-ін'єкцій, валідація введених даних.
- Гнучкий шаблонізатор: Підтримка різних технологій відображення.
- Активна спільнота та багато плагінів: Легка підтримка, можливість розширення проєкту.
- Детальна документація: Вичерпні довідники та API.
CakePHP підходить для створення проектів усіх масштабів: від простих API до корпоративних систем.
Налаштування середовища розробки CakePHP у ServBay
ServBay забезпечує комфортне середовище для роботи з CakePHP, завдяки:
- Вже встановленому PHP та потрібним розширенням.
- Вбудованому Composer.
- Простій конфігурації веб-сервера (Caddy/Nginx).
- Інтеграції з базами даних (MySQL, PostgreSQL, Redis та ін.).
З ServBay можна забути про ручне встановлення компонентів — усе готове з коробки.
Вимоги перед стартом
Перед початком переконайтеся, що:
- Встановлено ServBay: Ви завантажили й інсталювали ServBay на macOS.
- Запущені сервіси ServBay: Відкрийте додаток ServBay і переконайтеся, що потрібні пакети (наприклад PHP, база даних MySQL або PostgreSQL, а також кешсервіси Redis або Memcached) запущені. Слідкуйте за цим у розділі «Пакети» на панелі ServBay.
- Ознайомлені з основами ServBay: Знаєте, як додавати та налаштовувати сайти у ServBay. Якщо ви новачок — спочатку ознайомтеся з гайдом по базовій роботі з ServBay.
Створення проекту CakePHP
ServBay рекомендує зберігати Web-проекти у папці /Applications/ServBay/www
для автоматичного розпізнавання та зручного керування сайтами.
Відкрийте термінал
Запустіть стандартний термінал в macOS.
Перейдіть до кореневої папки сайтів ServBay
Перемістіться до запропонованої директорії:
bashcd /Applications/ServBay/www
1Створіть папку проекту
Створіть нову підпапку для проекту CakePHP. В нашому прикладі —
servbay-cakephp-app
:bashmkdir servbay-cakephp-app cd servbay-cakephp-app
1
2Створення проекту CakePHP через Composer
Composer вже інтегрований у ServBay. Створюємо скелет проекту:
bashcomposer create-project --prefer-dist cakephp/app .
1Ця команда завантажить актуальну стабільну версію CakePHP та всі залежності у поточну папку (
.
).Встановіть ORM-драйвер для PostgreSQL (опційно)
Якщо обрали PostgreSQL, додатково інсталювати драйвер:
bashcomposer require cakephp/orm-pgsql
1Для MySQL окремий драйвер не потрібен — він входить у core CakePHP.
Початкові налаштування
Після створення проекту необхідно налаштувати, зокрема, підключення до бази даних.
Налаштуйте змінні середовища й підключення до БД
Основна конфігурація локального середовища CakePHP міститься у файлі
config/app_local.php
. Відредагуйте цей файл, знайдіть секціюDatasources
та внесіть свої дані для з’єднання з базою. Стандартно в ServBay це usernameroot
, passwordpassword
.Приклад для MySQL:
php// config/app_local.php 'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Mysql::class, // або \Cake\Database\Driver\Postgres::class для PostgreSQL 'persistent' => false, 'host' => '127.0.0.1', // Адреса БД, у ServBay локально //'port' => '3306', // MySQL 3306, PostgreSQL 5432 'username' => 'root', // Стандартно у ServBay 'password' => 'password', // Стандартно у ServBay 'database' => 'servbay_cakephp_app', // Назва вашої бази даних 'encoding' => 'utf8mb4', 'timezone' => 'UTC', 'flags' => [], 'cacheMetadata' => true, 'log' => false, /** * Встановіть quoteIdentifiers true, якщо таблиця має назву, наприклад, "user". Якщо назва, наприклад, "cake" — false. * Якщо не впевнені — використовуйте true. */ 'quoteIdentifiers' => false, /** * Обмеження: * - Не всі драйвери підтримують рівні ізоляції через PDO. * - Не всі драйвери підтримують вибір charset через PDO. * - Пакетні драйвери, як Postgres CakePHP, не підтримують PDO-опції. * Для Postgres достатньо налаштувати encoding. */ 'options' => [], //'url' => env('DATABASE_URL', null), // Якщо використовуєте DATABASE_URL, увімкніть цей рядок ], ],
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35Корегуйте тип драйвера й порт відповідно до БД. Назва бази має збігатися з тією, яку створите.
Налаштування веб-сервера (створення сайту у ServBay)
Для доступу до проекту в браузері, створіть сайт у ServBay та вкажіть відповідну папку проекту.
Відкрийте панель керування ServBay
Кліком на іконку ServBay.
Перейдіть до вкладки "Сайти"
В панелі ServBay оберіть "Сайти" (раніше — "Хости") у навігації зліва.
Додайте новий сайт
Натисніть клавішу
+
для створення сайту. Вкажіть:- Name (Назва): Наприклад,
My CakePHP Dev Site
. - Domain (Домен): Наприклад,
servbay-cakephp-test.local
— буде працювати лише локально. - Site Type (Тип сайта): Виберіть
PHP
. - PHP Version (Версія PHP): Виберіть відповідну версію (CakePHP 4+ — PHP 7.4+; 5+ — PHP 8.1+; наприклад,
8.3
). - Document Root (Корінь сайту): Важливо! Корінь має вказувати на
webroot
всередині проекту CakePHP, а не на основну папку.Підставте вашу папку проекту замість/Applications/ServBay/www/servbay-cakephp-app/webroot
1servbay-cakephp-app
.
- Name (Назва): Наприклад,
Збережіть і застосуйте зміни
Натисніть "Зберегти" і підтвердіть застосування змін. ServBay автоматично налаштує веб-сервер (Caddy або Nginx) для роботи із доменом
servbay-cakephp-test.local
, а всі запити перенаправить у папкуwebroot
.
Докладна інструкція доступна у документації ServBay.
Перевірка базових налаштувань
Тепер запустіть браузер і перейдіть за обраним доменом, наприклад: https://servbay-cakephp-test.local
Якщо все вірно — побачите вітальну сторінку CakePHP. Це знак, що середовище PHP, веб-сервер і сайт ServBay налаштовані коректно.
Інтеграція бази даних і кешування
CakePHP має потужний ORM та API для кешування, що дозволяє швидко інтегрувати бази даних і кеш-сервіси ServBay.
Приклад робота з реляційною БД (MySQL / PostgreSQL)
Покажемо, як під'єднати MySQL або PostgreSQL у ServBay, створити таблицю users
, і виконати CRUD-операції.
Створіть базу даних у ServBay
Перш ніж запускати міграцію, створіть БД у сервісі ServBay. Це можна зробити через панелі phpMyAdmin (MySQL/MariaDB), pgAdmin (PostgreSQL), Navicat, DBeaver чи інший інструмент. Адреса:
127.0.0.1
, користувачroot
, парольpassword
. Створіть БДservbay_cakephp_app
.Створіть ORM-модель
Для цього — файл-модель
UsersTable.php
.Збережіть файл у
src/Model/Table/UsersTable.php
:php<?php namespace App\Model\Table; use Cake\ORM\Table; use Cake\Validation\Validator; // Якщо потрібна валідація class UsersTable extends Table { /** * Initialize method * * @param array $config The configuration for the Table. * @return void */ public function initialize(array $config): void { parent::initialize($config); $this->setTable('users'); // Вказуємо назву таблиці $this->setDisplayField('name'); // Поле, що буде відображатися за замовчуванням $this->setPrimaryKey('id'); // Якщо потрібна поведінка timestamp // $this->addBehavior('Timestamp'); } /** * Правила валідації за замовчуванням. * * @param \Cake\Validation\Validator $validator Validator instance. * @return \Cake\Validation\Validator */ public function validationDefault(Validator $validator): Validator { $validator ->scalar('name') ->maxLength('name', 255) ->requirePresence('name', 'create') ->notEmptyString('name'); $validator ->email('email') ->requirePresence('email', 'create') ->notEmptyString('email') ->add('email', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); // Перевірка унікальності email return $validator; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49Створіть міграцію через Bake
Використовуйте команду для генерації міграції:
bashbin/cake bake migration CreateUsers name:string email:string:unique
1Це створить міграційний файл, який додасть таблицю
users
з колонкамиname
і унікальнимemail
.Запустіть міграцію
bin/cake migrations migrate
1Після цього таблиця з’явиться у вашій БД.
Перевірте конфігурацію під’єднання
Переконайтеся, що у файлі
config/app_local.php
усі дані під’єднання до БД відповідають обраній системі.MySQL:
php'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Mysql::class, 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', // ... інше ], ],
1
2
3
4
5
6
7
8
9
10
11PostgreSQL:
php'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Postgres::class, 'host' => '127.0.0.1', // 'port' => '5432', // За замовчуванням 'username' => 'root', // Стандартно у ServBay 'password' => 'password', // Стандартно у ServBay 'database' => 'servbay_cakephp_app', // ... інше ], ],
1
2
3
4
5
6
7
8
9
10
11
12
Додайте приклад роутів та методи контролера
У
config/routes.php
додайте маршрути для прикладу:php// config/routes.php use Cake\Routing\RouteBuilder; use Cake\Routing\Router; use Cake\Routing\Route\DashedRoute; Router::defaultRouteClass(DashedRoute::class); Router::scope('/', function (RouteBuilder $routes) { // ... інші маршрути $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); // Маршрути для роботи з БД $routes->connect('/db-add-user', ['controller' => 'Pages', 'action' => 'dbAddUser']); $routes->connect('/db-list-users', ['controller' => 'Pages', 'action' => 'dbListUsers']); // ... інші маршрути $routes->fallbacks(DashedRoute::class); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Додайте методи у контролер
src/Controller/PagesController.php
:php<?php namespace App\Controller; use Cake\Http\Response; use Cake\ORM\TableRegistry; use Cake\Datasource\Exception\RecordNotFoundException; // Для обробки винятків class PagesController extends AppController { /** * Відображення сторінки * * @param array ...$path Сегменти шляху. * @return \Cake\Http\Response|null */ public function display(...$path): ?Response { // ... стандартний метод display return new Response(['body' => 'Hello ServBay! Це сторінка за замовчуванням.']); } /** * Приклад: додати користувача у БД */ public function dbAddUser(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // Отримати модель // Створити новий запис $user = $usersTable->newEntity([ 'name' => 'ServBay Demo User', 'email' => 'servbay-demo@servbay.test' // Тестовий email ]); // Зберегти користувача if ($usersTable->save($user)) { return new Response(['body' => 'Користувача успішно додано! ID: ' . $user->id]); } else { // Якщо помилка — покажіть причину $errors = $user->getErrors(); return new Response(['body' => 'Не вдалося додати користувача. Помилки: ' . json_encode($errors)]); } } /** * Приклад: перегляд усіх користувачів */ public function dbListUsers(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // Отримати список користувачів $users = $usersTable->find()->all(); // Повернути JSON-результат return new Response(['body' => json_encode($users->toArray())]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58Тестування
У браузері:
- Перейдіть за адресою
https://servbay-cakephp-test.local/db-add-user
— має з’явитися повідомлення про успіх. - Перейдіть на
https://servbay-cakephp-test.local/db-list-users
— побачите список користувачів (з доданим тестовим).
- Перейдіть за адресою
Отже, CakePHP підключено до БД через ORM і виконуються базові CRUD-операції.
Приклад роботи з кешем (Memcached / Redis)
CakePHP підтримує універсальний API для кешування, легко перемикаючись між Memcached або Redis. ServBay вже має потрібні розширення PHP і сервіси.
Перед початком переконайтесь, що в ServBay увімкнено Memcached або Redis у розділі «Пакети».
Налаштування кеш-підключення
У файлі
config/app_local.php
відредагуйте секціюCache
:- Memcached:php
// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\MemcachedEngine::class, 'servers' => ['127.0.0.1:11211'], // адреса і порт Memcached за замовчуванням 'prefix' => 'servbay_cakephp_', ], // ... інше ],
1
2
3
4
5
6
7
8
9 - Redis:php
// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\RedisEngine::class, 'host' => '127.0.0.1', // адреса Redis 'port' => 6379, 'password' => null, // Заповнити, якщо є пароль 'database' => 0, 'prefix' => 'servbay_cakephp_', ], // ... інше ],
1
2
3
4
5
6
7
8
9
10
11
12
- Memcached:
Додайте маршрути і методи контролера
У
config/routes.php
:php// config/routes.php // ... інші маршрути $routes->connect('/cache-memcached', ['controller' => 'Pages', 'action' => 'cacheMemcached']); $routes->connect('/cache-redis', ['controller' => 'Pages', 'action' => 'cacheRedis']); // ... інше
1
2
3
4
5Додайте методи у
src/Controller/PagesController.php
:php<?php namespace App\Controller; use Cake\Http\Response; use Cake\Cache\Cache; // ... інші use class PagesController extends AppController { // ... display, dbAddUser, dbListUsers /** * Робота з кешем: Memcached */ public function cacheMemcached(): Response { // Переконайтеся, що в app_local.php 'default' — MemcachedEngine $cacheKey = 'servbay_memcached_test_key'; $cachedData = Cache::read($cacheKey); $responseBody = ''; if ($cachedData === false) { // Промах кешу $responseBody = 'Cache miss! Записуємо "Hello Memcached!" у кеш.'; $dataToCache = 'Hello Memcached!'; Cache::write($cacheKey, $dataToCache, 'default'); } else { // Влучання у кеш $responseBody = 'Cache hit! Дані з кешу: ' . $cachedData; } return new Response(['body' => $responseBody]); } /** * Робота з кешем: Redis */ public function cacheRedis(): Response { // Переконайтеся, що в app_local.php 'default' — RedisEngine $cacheKey = 'servbay_redis_test_key'; $cachedData = Cache::read($cacheKey); $responseBody = ''; if ($cachedData === false) { // Промах кешу $responseBody = 'Cache miss! Записуємо "Hello Redis!" у кеш.'; $dataToCache = 'Hello Redis!'; Cache::write($cacheKey, $dataToCache, 'default'); } else { // Влучання у кеш $responseBody = 'Cache hit! Дані з кешу: ' . $cachedData; } return new Response(['body' => $responseBody]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61Тестування кешу
- Для Memcached — відкрийте
https://servbay-cakephp-test.local/cache-memcached
: перший раз "Cache miss", повторно — "Cache hit". - Для Redis — відкрийте
https://servbay-cakephp-test.local/cache-redis
: аналогічно.
- Для Memcached — відкрийте
Це означає, що кешування у проекті CakePHP працює через сервіси ServBay.
Корисні поради
- Дані для входу у БД: Локально у ServBay використовуйте стандартні логін/пароль (
root
/password
). Для продакшн-оточення — обов'язково замініть на захищені дані. - Корінь сайту: Вказуйте кореневу папку сайту у ServBay саме на
webroot
у проекті CakePHP — це важливо для коректної роботи. - Версія PHP: PHP у ServBay має бути сумісна з версією CakePHP — перевіряйте у документації CakePHP.
- Порт ServBay: Якщо стандартні порти (80/443) зайняті іншими програмами — замініть порт у налаштуваннях і використовуйте відповідну адресу/порт у hosts файлі або URL.
Часті питання (FAQ)
Q: Чому
servbay-cakephp-test.local
не відкривається?- A: Перевірте, чи корінь сайту вказано на
/Applications/ServBay/www/servbay-cakephp-app/webroot
. - Чи працює веб-сервер (Caddy/Nginx) у ServBay.
- hosts-файл — чи домен призначено на
127.0.0.1
(ServBay робить це автоматично, але варто перевірити). - Перевірте .htaccess/налаштування веб-сервера — зазвичай все коректно.
- A: Перевірте, чи корінь сайту вказано на
Q: Не підключається база даних?
- A: Перевірте, чи відповідний сервіс БД (MySQL/PostgreSQL) працює у ServBay.
- Чи коректні дані у
config/app_local.php
(host, port, username, password, database). - Чи створено БД
servbay_cakephp_app
.
Q: Не працює команда Composer (
bin/cake
)?- A: Чи у терміналі поточна папка — корінь проекту (
/Applications/ServBay/www/servbay-cakephp-app
). - Чи запущені PHP та Composer у ServBay.
- Чи термінал бачить команду
php
(ServBay автоматично додає PHP у PATH; використовуйте інтегрований термінал або налаштуйте PATH вручну).
- A: Чи у терміналі поточна папка — корінь проекту (
Висновки
ServBay дозволяє швидко та ефективно створити локальне середовище для розробки на CakePHP. Завдяки вбудованим PHP, Composer, веб-серверу й базам даних, процес налаштування суттєво спрощується. У статті описано повний цикл — від створення проекту та початкових налаштувань до інтеграції реляційних баз даних і кешування, щоб ви могли легко стартувати у світі CakePHP. Працюйте над кодом — довірте ServBay всі налаштування середовища!