Создание и запуск проекта Yii 2 в ServBay
Введение: Что такое Yii 2?
Yii 2 — высокопроизводительный компонентный фреймворк PHP, предназначенный для быстрой разработки современных веб-приложений. Он следует архитектуре MVC (Model-View-Controller), предоставляет полный набор мощных функций и инструментов, позволяя разработчикам эффективно создавать масштабируемые и качественные веб-продукты. Yii 2 популярен благодаря своей производительности, гибкой архитектуре и расширенным встроенным возможностям (таким как кэширование, безопасность, поддержка разработки RESTful API и др.).
Ключевые особенности и преимущества Yii 2
- Высокая производительность: Yii 2 оптимизирован для обработки больших объемов параллельных запросов и подходит для создания высоконагруженных систем.
- Модульность: Фреймворк спроектирован максимально модульно, что облегчает организацию кода и повторное использование компонентов.
- Безопасность: Встроены продвинутые средства защиты: валидация входных данных, фильтрация вывода, защита от CSRF/XSS, система аутентификации и авторизации и др.
- Простота использования: Интуитивный и лаконичный API, обширная документация и низкий порог входа позволяют быстро начать работу.
- Сильное сообщество: Активная комьюнити и множество сторонних расширений — всегда можно получить оперативную помощь.
- Интеграция инструментов: CLI-инструменты для миграций БД, генерации кода и других задач значительно ускоряют разработку.
Yii 2 идеально подходит для построения корпоративных систем, RESTful API, порталов и других проектов любого масштаба.
Использование ServBay для запуска Yii 2
ServBay — локальная среда web-разработки для macOS, включающая PHP, различные базы данных (MySQL, PostgreSQL, MongoDB, Redis), веб-серверы (Caddy, Nginx) и другие инструменты (Composer, Node.js, Python, Go, Java и др.), обеспечивая удобную платформу для работы “из коробки”.
В этом руководстве вы узнаете, как развернуть и запустить базовое приложение Yii 2 с помощью PHP-окружения ServBay, встроенного Composer и сервисов баз данных. Мы используем функцию “Сайты” для настройки локального веб-сервера и пошагово рассмотрим процесс доступа к проекту и демонстрации базовой работы.
Предварительные требования
Перед началом убедитесь, что вы:
- Установили и запустили ServBay на macOS.
- В ServBay установлен и активирован нужный PHP (например, PHP 8.3 или выше).
- В ServBay установлены и включены нужные сервисы БД (MySQL или PostgreSQL), а также кэш-сервисы (Memcached и Redis).
Для управления установленным ПО и его состоянием зайдите в основной интерфейс ServBay.
Создание проекта Yii 2
TIP
Рекомендуется сохранять ваш проект в директории /Applications/ServBay/www
. Это позволит поддерживать порядок в структуре файлов и облегчит управление через раздел “Сайты” в ServBay.
Composer: В ServBay Composer уже встроен, дополнительно устанавливать не требуется. Используйте команду
composer
напрямую в терминале.Создание каталога проекта: Откройте терминал, перейдите в корень сайта ServBay и создайте новую папку для проекта:
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Создание Yii 2 с помощью Composer: Внутри
servbay-yii2-app
запустите команду для установки базового шаблона Yii 2:bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Эта команда скачает шаблон и все его зависимости в текущую папку (
.
). Дождитесь завершения установки.Переход в папку проекта: Проверьте, что находитесь в корневой папке проекта
/Applications/ServBay/www/servbay-yii2-app
. Все дальнейшие действия выполняйте отсюда.bashcd /Applications/ServBay/www/servbay-yii2-app
1
Базовая настройка
После генерации проекта необходимо настроить подключение к базе данных и некоторые компоненты.
Настройка подключения к БД: Откройте файл
config/db.php
в корне проекта. Заполните параметры в соответствии с вашей базой в ServBay (обычно пользователь —root
, пароль —password
, если вы их не меняли).Сначала создайте БД для проекта — например, назовите её
servbay_yii2_app
. Это можно сделать через Adminer (идет в комплекте с ServBay) или любой другой SQL-клиент (Sequel Ace, TablePlus и т.д.). Adminer доступен в разделе “Базы данных” интерфейса ServBay.Пример для MySQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbname — имя вашей базы 'username' => 'root', // имя пользователя БД 'password' => 'password', // пароль БД 'charset' => 'utf8mb4', // рекомендуется для широкой поддержки символов ];
1
2
3
4
5
6
7
8
9Пример для PostgreSQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'pgsql:host=127.0.0.1;port=5432;dbname=servbay_yii2_app', // dbname — имя базы, port — как правило, 5432 'username' => 'root', // имя пользователя 'password' => 'password', // пароль 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // стандартная схема в PostgreSQL ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Выберите нужную версию файла
config/db.php
и скорректируйте под свою ситуацию.Конфигурация кэша и Redis: Откройте
config/web.php
. В секцииcomponents
добавьте/обновите параметры для Memcached и Redis. Порты по умолчанию: Memcached —11211
, Redis —6379
.php<?php // ... прочие параметры 'components' => [ // ... текущие компоненты (например, request, cache, user, errorHandler, log, urlManager) 'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, // порт Memcached 'weight' => 100, ], ], ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, // порт Redis 'database' => 0, // индекс базы Redis ], // ... остальные компоненты ], // ... другие параметры
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Проверьте, что сервисы Memcached и Redis запущены в ServBay. Для поддержки Redis требуется пакет
yiisoft/yii2-redis
(он обычно ставится с шаблоном, иначе выполнитеcomposer require yiisoft/yii2-redis
). Для Memcached используйтеyiisoft/yii2-memcached
(может входить в зависимости базового шаблона).
Настройка веб-сервера (Сайт в ServBay)
Используем раздел “Сайты” для направления (proxy) нужного домена на папку с вашим Yii 2-проектом (Caddy или Nginx).
- Запустите приложение ServBay.
- Перейдите к настройкам сайтов: В главном окне найдите пункт “Сайты” и войдите в него.
- Добавьте новый сайт: Нажмите кнопку добавления (
+
или “Добавить”). - Заполните данные сайта:
- Название: например,
My First Yii 2 Dev Site
. - Домен: введите локальный адрес, например,
servbay-yii2-test.local
(ServBay автоматически выполнит DNS-настройку на127.0.0.1
). - Тип сайта: выберите
PHP
. - Версия PHP: укажите нужную (например,
8.3
), убедитесь, что она установлена и активирована. - Корневая папка сайта: ОЧЕНЬ ВАЖНО! Для Yii 2 точка входа — папка
web
внутри проекта, поэтому корень сайта:/Applications/ServBay/www/servbay-yii2-app/web
.
- Название: например,
- Сохраните и примените: После сохранения конфигурации ServBay автоматически перезапустит веб-сервер.
Более подробно процесс описан в официальной документации ServBay: Добавление первого сайта.
ServBay автоматически сгенерирует и доверит SSL-сертификат (ServBay User CA или Public CA), поэтому вы можете использовать HTTPS для доступа.
Добавление демонстрационного кода
Для наглядной проверки работы с БД и кэшем добавим примерные действия в контроллер по умолчанию.
Откройте файл controllers/SiteController.php
в корне вашего проекта и добавьте следующие методы в класс SiteController
:
php
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
use yii\db\Exception as DbException; // Импорт класса ошибок БД
class SiteController extends Controller
{
/**
* Displays homepage.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Demonstrates Memcached usage.
*
* @return Response
*/
public function actionMemcached()
{
$cache = Yii::$app->cache;
$key = 'my_memcached_test_key';
$data = 'Hello Memcached from ServBay!';
$duration = 60; // Кэшировать на 60 секунд
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcached установлен успешно. Получено значение: " . $value);
} else {
return $this->asText("Не удалось записать данные в Memcached. Проверьте сервис и конфигурацию Memcached.");
}
}
/**
* Demonstrates Redis usage.
*
* @return Response
*/
public function actionRedis()
{
$redis = Yii::$app->redis;
$key = 'my_redis_test_key';
$data = 'Hello Redis from ServBay!';
try {
if ($redis->set($key, $data)) {
$value = $redis->get($key);
return $this->asText("Redis установлен успешно. Получено значение: " . $value);
} else {
return $this->asText("Не удалось записать данные в Redis. Проверьте сервис и конфигурацию Redis.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Ошибка Redis: " . $e->getMessage() . ". Проверьте сервис и конфигурацию Redis.");
}
}
/**
* Demonstrates adding a user to the database.
* Assumes a 'users' table exists.
*
* @return Response
*/
public function actionMysqlAdd() // Для PostgreSQL работает аналогично при верной настройке
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // Демонстрационное имя с брендом
'email' => '[email protected]', // Демонстрационный email с брендом
])->execute();
return $this->asText("Пользователь успешно добавлен. Затронуто строк: " . $count);
} catch (DbException $e) {
return $this->asText("Не удалось добавить пользователя в базу. Ошибка: " . $e->getMessage() . ". Проверьте службу БД, настройки и наличие таблицы 'users'.");
}
}
/**
* Demonstrates fetching users from the database.
* Assumes a 'users' table exists.
*
* @return Response
*/
public function actionMysql() // Для PostgreSQL работает аналогично при верной настройке
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Форматируем вывод для наглядности и безопасности
$output = "Найденные пользователи:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, Имя: {$user['name']}, Email: {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("Не удалось получить список пользователей. Ошибка: " . $e->getMessage() . ". Проверьте службу БД, настройки и наличие таблицы 'users'.");
}
}
// Для PostgreSQL можно добавить отдельные actions, но обычно одной компоненты db достаточно
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Formats output as plain text.
* @param string $text
* @return Response
*/
protected function asText($text)
{
Yii::$app->response->format = Response::FORMAT_RAW;
Yii::$app->response->getHeaders()->add('Content-Type', 'text/plain');
return $text;
}
/**
* Formats output as JSON.
* @param mixed $data
* @return Response
*/
protected function asJson($data)
{
Yii::$app->response->format = Response::FORMAT_JSON;
return $data;
}
}
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Обратите внимание: в actionMysqlAdd
и actionMysql
реализована обработка ошибок и отформатирован вывод, а данные для примера привязаны к бренду ServBay.
Теперь откройте представление views/site/index.php
(соответствует actionIndex
). Вы можете оставить содержимое по умолчанию или изменить для своего удобства:
php
<?php
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = 'My Yii2 Application on ServBay'; // Обновленный заголовок
?>
<div class="site-index">
<div class="jumbotron">
<h1>Поздравляем!</h1>
<p class="lead">Вы успешно создали Yii2-приложение и настроили его для работы с ServBay!</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Начать знакомство с Yii</a></p>
</div>
<div class="body-content">
<h2>Демонстрации</h2>
<ul>
<li><a href="<?= Html::toRoute('site/memcached') ?>">Проверить Memcached</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Проверить Redis</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">Добавить пользователя в БД</a> (требуется таблица 'users')</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Получить пользователей из БД</a> (требуется таблица 'users')</li>
</ul>
<p>Убедитесь, что Memcached, Redis и выбранная БД (MySQL/PostgreSQL) запущены в ServBay и корректно указаны в `config/web.php` и `config/db.php`.</p>
<p>Для примеров с БД создайте таблицу 'users' с помощью миграций Yii (см. ниже).</p>
</div>
</div>
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
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
В представлении добавлены удобные ссылки для тестирования новых методов контроллера.
Реляционная база данных: создание структуры (миграция)
Для работы методов actionMysqlAdd
и actionMysql
требуется таблица users
. В Yii для управления схемой рекомендовано использовать миграции.
Создайте файл миграции через Gii: В терминале (из каталога
/Applications/ServBay/www/servbay-yii2-app
) запустите команду:bashphp yii migrate/create create_users_table
1После подтверждения (
yes
) файл будет создан в папкеmigrations
, например,mYYYYMMDD_HHMMSS_create_users_table.php
.Редактирование файла миграции: Откройте файл, в методе
up()
опишите структуру таблицы:php<?php use yii\db\Migration; /** * Handles the creation of table `{{%users}}`. */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXX — временная метка { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // {{%users}} для поддержки префикса таблиц 'id' => $this->primaryKey(), 'name' => $this->string()->notNull(), 'email' => $this->string()->notNull()->unique(), 'created_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP'), 'updated_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), ]); // Опционально: индекс для email для ускорения поиска $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true = уникальный индекс ); } /** * {@inheritdoc} */ public function down() { // Удаление индекса $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Удаление таблицы $this->dropTable('{{%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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46Замените имя класса
mXXXXXXXXXXXXXX_create_users_table
на соответствующее вашему файлу.Запуск миграции: В терминале выполните команду:
bashphp yii migrate
1Подтвердите (
yes
), после чего таблица будет создана в базе данных.
Доступ к сайту и проведение тестов
Откройте браузер и перейдите по адресу, который вы задали при настройке сайта, например: https://servbay-yii2-test.local
.
- Открытие
https://servbay-yii2-test.local
приведет к отображению приветственной страницы Yii 2 и раздела демо-ссылок. - Клик по "Проверить Memcached" или переход по
https://servbay-yii2-test.local/index.php?r=site/memcached
покажет сообщение об успешной работе Memcached (если сервис и конфигурация корректны). - Клик по "Проверить Redis" или переход по
https://servbay-yii2-test.local/index.php?r=site/redis
покажет результат работы Redis. - Клик по "Добавить пользователя..." или по
https://servbay-yii2-test.local/index.php?r=site/mysql-add
добавит пользователя в БД (предварительно настройте миграцию). - Клик по "Получить пользователей..." или по
https://servbay-yii2-test.local/index.php?r=site/mysql
выведет список пользователей из БД.
Если возникают ошибки — перепроверьте работу сервисов (PHP, веб-сервер, БД, Memcached, Redis), корректность конфигурации config/db.php
и config/web.php
и успешное выполнение миграций инициализации БД.
Часто задаваемые вопросы (FAQ)
- Появляется “Сайт недоступен” или ошибка сертификата?
Проверьте, что сайт добавлен через настройки ServBay и само приложение ServBay запущено. ServBay сам настраивает локальный DNS и SSL. Если есть проблемы с сертификатами — убедитесь, что вы доверяете ServBay User CA или Public CA (подробности — в документации). - Не работает команда Composer?
Убедитесь, что в настройках ServBay активирован Composer. Команды надо выполнять в терминале macOS — путь до Composer ServBay будет прописан в PATH автоматически. - Нет подключения к базе данных?
Проверьте — работает ли выбранный сервис (MySQL/PostgreSQL) в ServBay, правильно ли указаны параметрыdsn
,username
,password
вconfig/db.php
, создана ли базаservbay_yii2_app
. Используйте Adminer (доступен в ServBay) для проверки подключения или структуры БД. - Memcached/Redis не работают?
Проверьте, запущены ли службы Memcached/Redis в ServBay, корректны ли параметрыhost
иport
вconfig/web.php
(должны быть127.0.0.1
и соответствующий порт). - Ошибка при миграции (
php yii migrate
)?
Проверьте правильность заполненияconfig/db.php
, работающую службу БД и наличие базы. - Ошибка “таблица не существует” при работе методов для пользователей?
Необходимо предварительно создать таблицу через миграцию:php yii migrate
. - Где смотреть PHP-журналы ошибок?
В ServBay есть отдельный раздел “Журналы”, где вы найдете логи PHP, веб-сервера и других компонентов для диагностики.
Итоги
С помощью ServBay вы можете быстро настроить полноценную локальную среду для разработки Yii 2 на macOS. Предустановленные Composer, управление версиями PHP, встроенные сервисы БД и кэша, а также удобные инструменты управления сайтами делают запуск и развитие проекта максимально простым. Следуя этой инструкции, вы без труда начнете работу с Yii 2 и воспользуетесь всеми преимуществами платформы ServBay.
Успешной разработки!