Создание и запуск проекта CakePHP
Что такое CakePHP?
CakePHP — это open-source PHP веб-фреймворк, предназначенный для быстрой разработки веб-приложений. Он основан на архитектуре MVC (модель-представление-контроллер) и предоставляет мощный набор инструментов, упрощающих такие типичные задачи в разработке, как взаимодействие с базой данных, обработка форм, аутентификация и управление сеансами.
Основные особенности и преимущества CakePHP
- Быстрая разработка: предоставляет богатый набор инструментов генерации кода, помогающих разработчикам быстро создавать общие структуры кода.
- Гибкий и мощный ORM: встроенный слой ORM (объектно-реляционное отображение) упрощает работу с базой данных.
- Безопасность: содержит встроенные функции безопасности, такие как валидация ввода, защита от CSRF и предотвращение SQL-инъекций.
- Сообщество поддержки: обладает активным сообществом и богатой экосистемой плагинов.
- Хорошая документация: предоставляет подробную документацию и учебные материалы для быстрого старта разработчиков.
CakePHP подходит для различных проектов — от небольших приложений до крупных корпоративных систем, помогая разработчикам быстро создавать качественные веб-приложения.
Создание и запуск проекта CakePHP с использованием ServBay
В этой статье мы создадим и запустим проект CakePHP, используя PHP-окружение, предоставляемое ServBay. Мы настроим веб-сервер с помощью функции "Host" у ServBay и реализуем доступ к проекту через простую конфигурацию.
Внимание: если вы ранее использовали NGINX или Apache
По умолчанию ServBay использует Caddy в качестве веб-сервера. Пользователям, переезжающим на ServBay с NGINX и Apache, следует обратить внимание на несколько ключевых изменений:
Конфигурация Caddy
Caddy уже встроен в ServBay, и его конфигурация оптимизирована и отлажена. Разработчикам нужно использовать только функцию "Host" у ServBay для управления сайтами, без ручной модификации конфигурационных файлов Caddy.
Правила перезаписи URL и .htaccess
В NGINX и Apache разработчикам обычно необходимо писать собственные правила перезаписи URL и файлы .htaccess для обработки перенаправлений и других настроек. Однако ServBay настраивается с уже готовыми правилами Caddy, так что, если нет особенных требований, разработчики могут не писать свои правила.
Узнать больше
Для получения дополнительной информации, просмотрите Rewrite и htaccess, Как мигрировать сайты Apache на ServBay, Как мигрировать сайты NGINX на ServBay.
Создание проекта CakePHP
TIP
ServBay рекомендует размещать сайты в директории /Applications/ServBay/www
для удобства управления.
Установка Composer
Composer уже предустановлен в ServBay, дополнительная установка не требуется.
Создание проекта CakePHP
Используйте Composer для создания нового проекта CakePHP:
bashcd /Applications/ServBay/www mkdir servbay-cakephp-app cd servbay-cakephp-app composer create-project --prefer-dist cakephp/app .
1
2
3
4Переход в директорию проекта
Перейдите в только что созданную директорию проекта CakePHP:
bashcd /Applications/ServBay/www/servbay-cakephp-app
1
Инициализация конфигурации
Настройка переменных окружения
Настройте информацию о подключении к базе данных и другие переменные окружения в файле
config/app_local.php
. Убедитесь, что следующие параметры установлены правильно:php'Datasources' => [ 'default' => [ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', 'url' => env('DATABASE_URL', null), ], ],
1
2
3
4
5
6
7
8
9
Настройка веб-сервера
Используйте функцию "Host" у ServBay для доступа к проекту CakePHP через веб-сервер. В настройках "Host" у ServBay добавьте новый хост:
- Имя:
My First CakePHP Dev Site
- Домен:
servbay-cakephp-test.local
- Тип сайта:
PHP
- Версия PHP: выберите
8.3
- Корневая директория сайта:
/Applications/ServBay/www/servbay-cakephp-app/webroot
Подробные шаги по настройке смотрите в Добавление первого сайта.
Добавление примерного кода
Добавьте следующий код в файл config/routes.php
для вывода "Hello ServBay!":
$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
Добавьте следующий код в файл src/Controller/PagesController.php
:
namespace App\Controller;
use Cake\Http\Response;
class PagesController extends AppController
{
public function display()
{
return new Response(['body' => 'Hello ServBay!']);
}
}
2
3
4
5
6
7
8
9
10
11
Доступ к сайту
Откройте браузер и перейдите на https://servbay-cakephp-test.local
, вы увидите Hello ServBay!
.
Пример работы с NoSQL базой данных
Пример с Memcached
Установка расширения Memcached
В ServBay расширение Memcached уже предустановлено, дополнительная установка не требуется.
Настройка Memcached
Настройте информацию о подключении к Memcached в файле
config/app_local.php
:php'Cache' => [ 'default' => [ 'className' => 'Cake\Cache\Engine\MemcachedEngine', 'servers' => ['127.0.0.1'], ], ],
1
2
3
4
5
6Настройка маршрутизации
Добавьте следующий код в файл
config/routes.php
:php$routes->connect('/memcached', ['controller' => 'Pages', 'action' => 'memcached']);
1Использование Memcached
Используйте кэширование в контроллере:
phpuse Cake\Cache\Cache; class PagesController extends AppController { public function memcached() { $cacheKey = 'my_cache_key'; $cachedData = Cache::read($cacheKey); if (!$cachedData) { $cachedData = 'Hello Memcached!'; Cache::write($cacheKey, $cachedData); } return new Response(['body' => $cachedData]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Откройте браузер и перейдите на
https://servbay-cakephp-test.local/memcached
Пример с Redis
Установка расширения Redis
В ServBay расширение Redis уже предустановлено, дополнительная установка не требуется.
Настройка Redis
Настройте информацию о подключении к Redis в файле
config/app_local.php
:php'Cache' => [ 'default' => [ 'className' => 'Cake\Cache\Engine\RedisEngine', 'server' => '127.0.0.1', 'port' => 6379, ], ],
1
2
3
4
5
6
7Настройка маршрутизации
Добавьте следующий код в файл
config/routes.php
:php$routes->connect('/redis', ['controller' => 'Pages', 'action' => 'redis']);
1Использование Redis
Используйте кэширование в контроллере:
phpuse Cake\Cache\Cache; class PagesController extends AppController { public function redis() { $cacheKey = 'my_cache_key'; $cachedData = Cache::read($cacheKey); if (!$cachedData) { $cachedData = 'Hello Redis!'; Cache::write($cacheKey, $cachedData); } return new Response(['body' => $cachedData]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Откройте браузер и перейдите на
https://servbay-cakephp-test.local/redis
Пример работы с реляционной базой данных
Создание структуры базы данных и миграционных файлов
Создание миграционного файла
Используйте инструмент Bake от CakePHP для создания миграционного файла:
bashbin/cake bake migration CreateUsers name:string email:string:unique
1Выполнение миграций
Используйте команды CakePHP для выполнения миграций и создания таблиц в базе данных:
bashbin/cake migrations migrate
1
Пример с MySQL
Настройка MySQL
Настройте информацию о подключении к MySQL в файле
config/app_local.php
:php'Datasources' => [ 'default' => [ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', 'url' => env('DATABASE_URL', null), ], ],
1
2
3
4
5
6
7
8
9Настройка маршрутизации
Добавьте следующий код в файл
config/routes.php
:php$routes->connect('/mysql-add', ['controller' => 'Pages', 'action' => 'mysqlAdd']); $routes->connect('/mysql', ['controller' => 'Pages', 'action' => 'mysql']);
1
2Добавление таблицы Users
Сохраните следующий код в файл
src/Model/Table/UsersTable.php
:php<?php namespace App\Model\Table; use Cake\ORM\Table; class UsersTable extends Table { }
1
2
3
4
5
6
7
8Запись данных пользователя
Запишите данные пользователя в контроллере:
phpuse App\Model\Entity\User; use Cake\ORM\TableRegistry; class PagesController extends AppController { public function mysqlAdd() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $user = $usersTable->newEntity(['name' => 'ServBay', 'email' => '[email protected]']); if ($usersTable->save($user)) { return new Response(['body' => 'User added']); } return new Response(['body' => 'Failed to add user']); } public function mysql() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $users = $usersTable->find()->all(); return new Response(['body' => json_encode($users)]); } }
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Откройте браузер и перейдите на
https://servbay-cakephp-test.local/mysql-add
иhttps://servbay-cakephp-test.local/mysql
Пример с PostgreSQL
Настройка PostgreSQL
Настройте информацию о подключении к PostgreSQL в файле
config/app_local.php
:php'Datasources' => [ 'default' => [ 'host' => '127.0.0.1', 'driver' => Postgres::Class, 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', 'url' => env('DATABASE_URL', null), ], ],
1
2
3
4
5
6
7
8
9
10Настройка маршрутизации
Добавьте следующий код в файл
config/routes.php
:php$routes->connect('/pgsql-add', ['controller' => 'Pages', 'action' => 'pgsqlAdd']); $routes->connect('/pgsql', ['controller' => 'Pages', 'action' => 'pgsql']);
1
2Добавление таблицы Users
Сохраните следующий код в файл
src/Model/Table/UsersTable.php
:php<?php namespace App\Model\Table; use Cake\ORM\Table; class UsersTable extends Table { }
1
2
3
4
5
6
7
8Запись данных пользователя
Запишите данные пользователя в контроллере:
phpuse App\Model\Entity\User; use Cake\ORM\TableRegistry; class PagesController extends AppController { public function pgsqlAdd() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $user = $usersTable->newEntity(['name' => 'ServBay', 'email' => '[email protected]']); if ($usersTable->save($user)) { return new Response(['body' => 'User added']); } return new Response(['body' => 'Failed to add user']); } public function pgsql() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $users = $usersTable->find()->all(); return new Response(['body' => json_encode($users)]); } }
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Откройте браузер и перейдите на
https://servbay-cakephp-test.local/pgsql-add
иhttps://servbay-cakephp-test.local/pgsql
Следуя этим шагам, вы успешно создали и запустили проект CakePHP, используя возможности ServBay для управления и доступа к вашему проекту, а также подключили и использовали различные базы данных.