Создание и запуск проекта Yii 2 в ServBay
Введение: Что такое Yii 2?
Yii 2 — это высокопроизводительный компонентный PHP-фреймворк для быстрой разработки современных веб-приложений. Он реализует архитектуру MVC (Model-View-Controller), предоставляет полный набор богатых функций и инструментов, помогающих разработчикам эффективно создавать масштабируемые и качественные проекты. Yii 2 популярен благодаря высокой скорости работы, гибкой архитектуре и встроенным возможностям, таким как кеширование, безопасность и поддержка RESTful API.
Ключевые особенности и преимущества Yii 2
- Высокая производительность: Yii 2 оптимизирован для обработки большого количества одновременных запросов и подходит для высоконагруженных приложений.
- Модульность: Продуманная архитектура с акцентом на переиспользуемые компоненты и грамотную организацию кода.
- Безопасность: Имеет множество встроенных функций для валидации данных, фильтрации вывода, защиты от CSRF/XSS, аутентификации и авторизации.
- Простота использования: Лаконичный и понятный API с подробной документацией снижает порог вхождения и ускоряет старт разработки.
- Мощная поддержка сообщества: Активное сообщество, большое количество расширений и решений сторонних разработчиков для быстрого поиска помощи.
- Встроенные инструменты: Командная строка для генерации кода, миграций, управления базой данных и других задач — всё для повышения удобства.
Yii 2 отлично подходит для создания корпоративных сервисов, RESTful API, порталов и других веб-проектов различного масштаба.
Как запустить Yii 2-проект в ServBay
ServBay — это современная локальная среда разработки, созданная для macOS и Windows. В нее интегрированы PHP, популярные базы данных (MySQL, PostgreSQL, MongoDB, Redis), веб-серверы (Caddy, Nginx), а также инструменты для разработчиков (Composer, Node.js, Python, Go, Java и др.), обеспечивающие "готовый к работе" набор для веб-разработки.
Ниже описано, как создать и запустить базовое приложение Yii 2, используя встроенную поддержку PHP, Composer и сервисы баз данных ServBay. Мы будем использовать функцию “Веб-сайты” для настройки локального веб-сервера и демонстрации работы базовых возможностей проекта.
Предварительные условия
Перед началом убедитесь, что:
- ServBay успешно установлен и запущен в вашей системе (macOS или Windows).
- В ServBay активирована подходящая версия PHP (например, 8.3 или выше).
- В ServBay установлены и включены выбранные сервисы баз данных (MySQL или PostgreSQL), а также кеш-сервисы (Memcached и Redis).
В главном окне ServBay можно посмотреть список установленных пакетов и состояние сервисов.
Создание Yii 2-проекта
TIP
ServBay рекомендует сохранять проекты в следующих директориях для удобства, порядка и корректной работы функции “Веб-сайты”:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Composer: Инструмент Composer уже встроен в ServBay, дополнительная установка не требуется. Команду
composer
можно использовать напрямую в терминале.Создание директории проекта: Откройте терминал, перейдите в корневую директорию сайтов ServBay и создайте папку для нового проекта.
macOS:
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Windows:
cmdcd C:\ServBay\www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Создание проекта Yii 2 через Composer: Находясь в
servbay-yii2-app
, выполните команду создания базового шаблона приложения.bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Composer загрузит шаблон базового приложения Yii 2 и все зависимости в текущую папку (
.
). Дождитесь завершения установки.Переход в директорию проекта: Убедитесь, что вы находитесь в корневой директории проекта. Все последующие команды будут выполняться оттуда.
macOS:
bashcd /Applications/ServBay/www/servbay-yii2-app
1Windows:
cmdcd C:\ServBay\www\servbay-yii2-app
1
Первоначальная настройка
После создания проекта Yii 2 требуется его базовая конфигурация, прежде всего параметры подключения к базе данных и компонентов.
Настройка подключения к базе данных: Отредактируйте файл
config/db.php
в корне проекта. В зависимости от выбранного сервиса (MySQL или PostgreSQL) и используемых параметров (обычно имя пользователя —root
, пароль —password
, если вы не меняли их), обновите настройки подключения.Для начала в ServBay следует создать новую базу для этого проекта, например,
servbay_yii2_app
. Используйте встроенный инструмент Adminer или любой клиент (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Убедитесь, что в ServBay запущены сервисы Memcached и Redis. Для работы с Redis потребуется пакет
yiisoft/yii2-redis
(он устанавливается Composer’ом при создании проекта, при необходимости —composer require yiisoft/yii2-redis
). Для Memcached применяетсяyiisoft/yii2-memcached
. В стандартном шаблоне они могут быть уже добавлены.
Настройка веб-сервера (Сайт в ServBay)
Функция “Веб-сайты” в ServBay позволяет легко связать локальный веб-сервер (Caddy или Nginx) с проектом Yii 2.
- Запустите приложение ServBay.
- Перейдите к настройкам сайта: Найдите и откройте раздел “Веб-сайты” или аналогичную вкладку.
- Добавьте новый сайт: Нажмите кнопку добавления (
+
илиДобавить
). - Заполните параметры сайта:
- Имя: например,
My First Yii 2 Dev Site
. - Домен: например,
servbay-yii2-test.local
. ServBay сам настроит локальный DNS на127.0.0.1
. - Тип сайта: выберите
PHP
. - Версия PHP: укажите нужную (например,
8.3
). Проверьте, что она установлена и включена. - Корневая директория сайта: важно! Для базового шаблона Yii 2 точкой входа является подпапка
web
внутри проекта. Укажите путь:- macOS:
/Applications/ServBay/www/servbay-yii2-app/web
- Windows:
C:\ServBay\www\servbay-yii2-app\web
- macOS:
- Имя: например,
- Сохранить и применить: Сохраните конфигурацию, ServBay автоматически обновит параметры веб-сервера.
Подробнее смотрите официальную документацию ServBay по добавлению сайта.
ServBay автоматически выпустит и доверит SSL-сертификат для вашего домена (через ServBay User CA или ServBay Public CA), позволяя использовать HTTPS.
Примеры кода для демонстрации работы
Добавьте в контроллер по умолчанию Yii 2 примеры методов, демонстрирующих работу с базой данных и кешем.
Откройте файл 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
{
/**
* Главная страница.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Демонстрация работы с Memcached.
*
* @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.");
}
}
/**
* Демонстрация работы с Redis.
*
* @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.");
}
}
/**
* Добавление пользователя в базу данных.
* Предполагает наличие таблицы 'users'.
*
* @return Response
*/
public function actionMysqlAdd() // Аналогично для PostgreSQL при настройке db-компонента
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // Имя для демонстрации с упоминанием бренда
'email' => 'demo-user@servbay.test', // Демонстрационный email
])->execute();
return $this->asText("Пользователь успешно добавлен. Затронуто строк: " . $count);
} catch (DbException $e) {
return $this->asText("Ошибка при добавлении пользователя. " . $e->getMessage() . ". Проверьте настройки базы, сервис и наличие таблицы 'users'.");
}
}
/**
* Получение пользователей из базы данных.
* Предполагает наличие таблицы 'users'.
*
* @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 можно добавить отдельные методы
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Форматирование вывода в виде обычного текста.
* @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;
}
/**
* Форматирование вывода как 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
добавлена обработка ошибок, а вывод отформатирован для наглядности. Имена и email демонстрационных пользователей соответствуют бренду 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 = 'Мое приложение Yii2 на 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.
Создайте файл миграции через консоль: Откройте терминал, перейдите в корень проекта и выполните команду создания миграции.
Путь к проекту:
- macOS:
/Applications/ServBay/www/servbay-yii2-app
- Windows:
C:\ServBay\www\servbay-yii2-app
bashphp yii migrate/create create_users_table
1Введите
yes
для подтверждения. В папкеmigrations
появится новый PHP-файл видаmYYYYMMDD_HHMMSS_create_users_table.php
.- macOS:
Отредактируйте файл миграции: Откройте созданный файл и пропишите структуру таблицы в методе
up()
:php<?php use yii\db\Migration; /** * Создание таблицы `{{%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'), ]); // Дополнительно: создаем индекс для ускорения поиска $this->createIndex( 'idx-users-email', '{{%users}}', 'email', 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Замените имя класса на фактическое название файла.
Запустите миграцию: В терминале, находясь в корне проекта, выполните:
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 работает и настроен, появится сообщение "Memcached успешно установлен...". - Кликните "Тест Redis" или перейдите на
https://servbay-yii2-test.local/index.php?r=site/redis
: аналогично, для работающего Redis появится сообщение "Redis успешно установлен...". - Кликните "Добавить пользователя в БД" или перейдите на
https://servbay-yii2-test.local/index.php?r=site/mysql-add
: если база данных настроена и таблицаusers
создана, должно появиться сообщение об успешном добавлении пользователя. - "Получить пользователей из БД" или
https://servbay-yii2-test.local/index.php?r=site/mysql
: если таблица есть, вы увидите список пользователей изusers
.
Если возникнут ошибки — проверьте состояние всех сервисов ServBay (PHP, веб-сервер, база данных, Memcached, Redis), а также корректность параметров в файлах конфигурации проекта и факт наличия таблицы в базе.
Часто задаваемые вопросы (FAQ)
- Почему сайт недоступен или возникает ошибка сертификата? Проверьте, корректно ли добавлен домен в настройках сайта ServBay и запущено ли приложение ServBay. DNS и SSL-сертификаты выдаются автоматически. При ошибке сертификата убедитесь, что доверены ServBay User CA или ServBay Public CA. См. руководство по ServBay.
- Почему не работает Composer? Убедитесь в включении пакета Composer в интерфейсе ServBay и запуске команд в терминале macOS. ServBay автоматически добавляет Composer в системный PATH.
- Подключение к базе не удается? Проверьте, что сервис базы данных (MySQL/PostgreSQL) активен в ServBay, параметры
dsn
,username
,password
вconfig/db.php
совпадают с вашей конфигурацией, и база создана. Проверьте соединение через Adminer от ServBay. - Memcached/Redis не подключается? Проверьте запуск сервисов в ServBay и правильность параметров
host
иport
вconfig/web.php
. - Ошибка миграции (
php yii migrate
)? Проверьте корректность настроек базы и факт запуска сервиса, а также наличие базы. - Почему в
actionMysqlAdd
/actionMysql
ошибка о несуществующей таблице? Перед этим нужно выполнить миграцию — командаphp yii migrate
создаст нужную таблицу. - Где смотреть логи PHP? Все логи PHP и веб-сервера доступны в разделе “Логи” интерфейса ServBay — используйте их для диагностики.
Заключение
ServBay позволяет быстро и удобно развернуть полноценную локальную среду разработки Yii 2 на macOS и Windows. Встроенные Composer, управление версиями PHP, сервисы баз данных и кеша, а также упрощенная настройка сайтов значительно ускоряют старт и разработку проектов. Следуя этому гайду, вы быстро запустите свой Yii 2-проект и сможете использовать весь потенциал инструментов ServBay для повышения эффективности работы.
Успешной разработки!