Создание и запуск проекта CakePHP с помощью ServBay
ServBay — это локальная среда веб-разработки для macOS и Windows, интегрирующая окружения для PHP, Node.js, Python, Go, Java и другие языки, а также сервисы баз данных MySQL, PostgreSQL, MongoDB, Redis и пр., работая с веб-серверами Caddy или Nginx. ServBay предоставляет удобную и эффективную платформу для разработки, позволяя легко развернуть и администрировать локальные проекты.
В этой статье вы получите пошаговое руководство по созданию, настройке и запуску проекта CakePHP в среде ServBay. CakePHP — это популярный PHP‑фреймворк веб-разработки, реализующий паттерн MVC (Модель-Вид-Контроллер), известный своей скоростью разработки, мощной ORM и встроенными механизмами безопасности. Благодаря интеграции с ServBay вы сможете моментально начать работу над проектом на CakePHP.
Что такое CakePHP?
CakePHP — это открытый PHP-фреймворк для создания веб-приложений, предоставляющий фундаментальную структуру для быстрого и организованного программирования без потери гибкости. Фреймворк реализует принцип “конвенции выше конфигурации”, упрощая типичные задачи разработчика.
Ключевые возможности и преимущества CakePHP
- MVC структура: Четкая организация кода облегчает поддержку и масштабирование.
- Быстрая разработка: Утилита командной строки Bake помогает автоматически генерировать код и ускоряет процесс.
- Мощная ORM (объектно-реляционное отображение): Упрощает работу с базой данных, поддерживает разные СУБД.
- Встроенные механизмы безопасности: CSRF‑защита, предупреждение SQL‑инъекций, валидация данных.
- Гибкий шаблонизатор: Поддержка различных технологий представления.
- Активное сообщество и обширный каталог плагинов: Легко получить поддержку и расширить функциональность проекта.
- Подробная документация: Полные инструкции и справочник API.
CakePHP подходит для проектов любого масштаба — от простых API до сложных корпоративных приложений.
Развертывание среды разработки CakePHP с помощью ServBay
ServBay предоставляет удобную интеграцию для проектов на CakePHP, включая:
- Предустановленный PHP-движок с расширениями.
- Composer — менеджер пакетов PHP.
- Легкая настройка веб-сервера (Caddy либо Nginx).
- Встроенные сервисы баз данных (MySQL, PostgreSQL, Redis и др.).
С помощью ServBay вы избавляетесь от необходимости вручную устанавливать и настраивать компоненты.
Необходимые условия
Перед стартом убедитесь, что подготовили следующее:
- Установка ServBay: Загрузите и установите ServBay на macOS.
- Запуск сервисов ServBay: Откройте приложение ServBay и активируйте нужные пакеты (например, PHP, выбранную СУБД — MySQL или PostgreSQL, а также кеш-сервисы Redis или Memcached). Управление сервисами доступно во вкладке “Пакеты” панели ServBay.
- Знакомство с основами ServBay: Овладейте базовой работой — добавлением и настройкой сайта в ServBay. Если вы новичок, рекомендуем сначала ознакомиться с Базовым руководством по ServBay.
Создание проекта CakePHP
ServBay рекомендует хранить все файлы веб-проектов в единой директории /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 дополнительный драйвер обычно не требуется — он есть в базовых зависимостях CakePHP.
Первичная настройка
После создания проекта выполните базовую конфигурацию, включая параметры подключения к базе данных.
Настройте переменные окружения и соединение с базой данных
Основные параметры локального окружения CakePHP находятся в файле
config/app_local.php
. Откройте этот файл, найдите секциюDatasources
и пропишите свои данные для подключения. В ServBay по умолчанию имя пользователя для БД —root
, пароль —password
.Пример настройки 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', // Адрес сервера БД, по умолчанию — localhost //'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, /** * Включите экранирование идентификаторов, если используете зарезервированные слова (например, "user") в качестве имени таблицы. * Для "cake" можно отключить. * Если не уверены — включите. */ 'quoteIdentifiers' => false, /** * Ограничения: * - Большинство драйверов не поддерживают настройку уровня изоляции через PDO. * Попытка установки вызовет ошибку. * - Не все драйверы поддерживают изменение кодировки через PDO. * Попытка установки вызовет ошибку. * - Настройки PDO недоступны для пакетированных драйверов, например, Postgres из CakePHP. * Для 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
36
37
38Приведите параметры driver и port в соответствие с выбранной СУБД (MySQL или PostgreSQL) и убедитесь, что значение database совпадает с именем вашей базы данных.
Настройка веб-сервера и создание сайта в ServBay
Чтобы получить доступ к проекту CakePHP через браузер, настройте сайт в ServBay на ваш рабочий каталог.
Откройте панель управления ServBay
Кликните по иконке ServBay для запуска панели.
Перейдите на вкладку “Сайты”
Во вспомогательном меню слева выберите раздел “Сайты” (ранее “Хосты”).
Добавьте новый сайт
Нажмите кнопку
+
внизу для создания нового сайта. Заполните:- Имя (Name): Например,
My CakePHP Dev Site
. - Домен (Domain): Придумайте локальный домен, например,
servbay-cakephp-test.local
. ServBay автоматически свяжет его с localhost. - Тип сайта (Site Type): Выберите
PHP
. - Версия PHP (PHP Version): Укажите подходящую для вашей версии CakePHP (например, CakePHP 4+ — PHP 7.4+, CakePHP 5+ — PHP 8.1+), напр.,
8.3
. - Корневой каталог сайта (Document Root): Внимание! Корнем сайта для CakePHP является папка
webroot
внутри проекта, а не корневая директория проекта. Пример:/Applications/ServBay/www/servbay-cakephp-app/webroot
(заменитеservbay-cakephp-app
на актуальное название вашей директории).
- Имя (Name): Например,
Сохраните и примените изменения
После заполнения нажмите “Сохранить”. Сервер автоматически предложит применить изменения — подтвердите действие. ServBay сам настроит выбранный веб-сервер (Caddy или Nginx) для работы с вашим доменом и перенаправит запросы к папке
webroot
.
Детальная инструкция по добавлению сайта — в официальной документации ServBay: Добавление первого сайта.
Проверка первичной настройки
Теперь вы можете перейти к вашему сайту через браузер.
Откройте браузер и введите выбранный домен, например, https://servbay-cakephp-test.local
.
Если всё указано корректно, откроется стандартная страница приветствия CakePHP. Это значит, что окружение PHP и веб-сервер в ServBay настроены как надо.
Интеграция с базой данных и кешированием
CakePHP использует мощный ORM и абстракцию кеша, что позволяет легко подключить любые сервисы баз данных и кеширования, предлагаемые ServBay.
Пример работы с реляционной СУБД (MySQL / PostgreSQL)
В этом примере показано, как с помощью ORM CakePHP подключаться к серверам баз данных MySQL или PostgreSQL, создавать таблицу пользователей и выполнять основные операции CRUD.
Создайте базу данных в ServBay
Перед миграцией базы данных заведите новую БД через административный инструмент ServBay (например, phpMyAdmin для MySQL/MariaDB, pgAdmin для PostgreSQL или сторонние приложения типа Navicat/DBeaver). Подключитесь к серверу (обычно
127.0.0.1
, пользовательroot
, парольpassword
) и создайте базу с именемservbay_cakephp_app
.Создайте файл модели ORM
ORM CakePHP требует файл модели для отображения таблицы. Создайте файл
UsersTable.php
, отвечающий за таблицуusers
.Сохраните следующий код в
src/Model/Table/UsersTable.php
:php<?php namespace App\Model\Table; use Cake\ORM\Table; use Cake\Validation\Validator; // Для правил валидации class UsersTable extends Table { /** * Метод инициализации * * @param array $config Конфигурация для 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 Экземпляр валидатора. * @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
CakePHP рекомендует явно управлять структурой БД через миграции. В корне проекта (
/Applications/ServBay/www/servbay-cakephp-app
) выполните:bashbin/cake bake migration CreateUsers name:string email:string:unique
1Эта команда создаст файл миграции для создания таблицы
users
с полямиname
(строка) иemail
(строка, уникальное значение).Примените миграцию
Запустите миграцию, чтобы реально завести таблицу в созданной базе:
bashbin/cake migrations migrate
1После выполнения команды таблица появится в вашей базе данных.
Проверьте настройки подключения к БД
Убедитесь, что секция
Datasources.default
в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
11Пример для PostgreSQL:
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! This is the default page.']); } /** * Пример работы с БД: добавление пользователя */ public function dbAddUser(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // Получаем экземпляр Users // Создание новой сущности пользователя $user = $usersTable->newEntity([ 'name' => 'ServBay Demo User', 'email' => 'servbay-demo@servbay.test' // Пример email с брендом ServBay ]); // Сохраняем пользователя в базу if ($usersTable->save($user)) { return new Response(['body' => 'User added successfully! User ID: ' . $user->id]); } else { // Если возникла ошибка — например, неверные данные $errors = $user->getErrors(); // Получаем детали ошибок валидации return new Response(['body' => 'Failed to add user. Errors: ' . 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.
Пример работы с кешем (Memcached / Redis)
CakePHP предоставляет универсальный API для кеширования и позволяет моментально переключаться между Memcached и Redis. ServBay уже содержит соответствующие расширения PHP и сервисы.
Для начала убедитесь, что сервис Memcached или Redis активирован во вкладке “Пакеты” панели ServBay.
Настройте кеш-соединение
Редактируйте секцию
Cache
в файлеconfig/app_local.php
для подключения к нужному сервису.Пример Memcached:
php// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\MemcachedEngine::class, 'servers' => ['127.0.0.1:11211'], // Стандартный адрес и порт Memcached в ServBay '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, предоставляемый ServBay 'port' => 6379, // Стандартный порт Redis 'password' => null, // Если установлен пароль — укажите здесь 'database' => 0, // Индекс базы Redis 'prefix' => 'servbay_cakephp_', // Префикс ключей ], // ... другие настройки кеша ],
1
2
3
4
5
6
7
8
9
10
11
12
Настройте тот сервис, который планируете использовать.
Добавьте маршруты и методы для работы с кешем
В файле
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; // Импорт Cache // ... остальные импорты 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! Writing "Hello Memcached!" to cache.'; $dataToCache = 'Hello Memcached!'; Cache::write($cacheKey, $dataToCache, 'default'); // Записываем в кеш } else { // Кеш найден $responseBody = 'Cache hit! Data from cache: ' . $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! Writing "Hello Redis!" to cache.'; $dataToCache = 'Hello Redis!'; Cache::write($cacheKey, $dataToCache, 'default'); // Записываем в кеш } else { // Кеш найден $responseBody = 'Cache hit! Data from cache: ' . $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, откройте
Это подтверждает успешную интеграцию кеш-сервиса ServBay с вашим проектом CakePHP.
Важные замечания
- Доступ к БД по умолчанию: Стандартный логин и пароль ServBay (
root
/password
) использовать только для разработки на локальной машине. Для продакшн-сайтов задайте более надёжные реквизиты. - Корневая папка для сайта: Убедитесь, что “Document Root” сайта в ServBay указывает именно на папку
webroot
внутри CakePHP-проекта, а не на корень проекта. - Совместимость PHP: Проверьте, что используемая версия PHP подходит для нужной версии CakePHP (см. официальную документацию).
- Порты ServBay: Если стандартные порты (80/443) заняты, измените их в настройках ServBay и корректно настройте hosts или используйте адрес с портом.
Часто задаваемые вопросы (FAQ)
- Q: Почему при переходе на
servbay-cakephp-test.local
появляется ошибка “Страница не найдена”?- A: Проверьте, что “Document Root” сайта ServBay указывает на
/Applications/ServBay/www/servbay-cakephp-app/webroot
. - Убедитесь, что выбранный веб-сервер (Caddy/Nginx) запущен в ServBay.
- Просмотрите файл hosts — запись, соответствующая домену, должна указывать на
127.0.0.1
(ServBay обычно делает это автоматически). - Проверьте наличие и содержимое
.htaccess
(обычно стандартный файл из папкиwebroot
подходит).
- A: Проверьте, что “Document Root” сайта ServBay указывает на
- Q: Не удаётся подключиться к базе данных?
- A: Удостоверьтесь, что сервис базы данных (MySQL или PostgreSQL) активен в ServBay.
- Проверьте параметры подключения (
host
,port
,username
,password
,database
) вconfig/app_local.php
, они должны соответствовать настройкам ServBay. - Убедитесь, что база данных
servbay_cakephp_app
уже создана.
- Q: Не работает команда Composer (
bin/cake
)?- A: Убедитесь, что вы находитесь в корне проекта CakePHP (
/Applications/ServBay/www/servbay-cakephp-app
). - Проверьте, что PHP и Composer запущены через панель ServBay.
- Удостоверьтесь, что php доступен в терминале (ServBay обычно добавляет его в переменную PATH). Используйте интегрированный терминал ServBay или настройте PATH вручную.
- A: Убедитесь, что вы находитесь в корне проекта CakePHP (
Итог
ServBay позволяет развернуть локальную среду для разработки CakePHP максимально быстро и удобно. Благодаря готовым интеграциям PHP, Composer, веб-сервера и сервисов баз данных, весь процесс настройки сведён к минимуму. В данном руководстве рассмотрен полный рабочий цикл — от создания проекта и базовых конфигураций до интеграции реляционной СУБД и кеширования — чтобы вы могли сфокусироваться на разработке самого приложения, а не на инфраструктуре.