Створення та запуск проекту Yii 2 у ServBay
Огляд: Що таке Yii 2?
Yii 2 — це високопродуктивний компонентний фреймворк PHP, створений для швидкої розробки сучасних веб-додатків. Він реалізує патерн MVC (Model-View-Controller), пропонує широкі можливості та інструменти для ефективної розробки масштабованих і якісних веб-рішень. Yii 2 здобув велику популярність завдяки чудовій продуктивності, гнучкій архітектурі та потужним вбудованим функціям — кешування, безпека, підтримка RESTful API тощо.
Основні переваги та особливості Yii 2
- Висока продуктивність: фреймворк оптимізовано для обробки великої кількості одночасних запитів — ідеально для створення продуктивних додатків.
- Модульність: архітектура дозволяє структурувати код та повторно використовувати компоненти без зайвих зусиль.
- Безпека: присутнє потужне вбудоване забезпечення безпеки — валідація вводу, фільтрація виходу, CSRF/XSS захист, аутентифікація і авторизація.
- Зручність використання: інтуїтивний API та вичерпна документація роблять вивчення та старт простим.
- Активна спільнота: велика база сторонніх розширень та активна підтримка від розробників.
- Інтегровані інструменти: доступний командний рядок для міграцій БД, генерації коду та інших задач для підвищення ефективності.
Yii 2 є ідеальним вибором для корпоративних застосунків, RESTful API, порталів та різноманітних типів веб-проектів.
Використання ServBay для запуску проекту Yii 2
ServBay — це локальне середовище веб-розробки, створене для macOS та Windows. Воно інтегрує PHP, різні СУБД (MySQL, PostgreSQL, MongoDB, Redis), веб-сервери (Caddy, Nginx) та інші корисні інструменти (Composer, Node.js, Python, Go, Java тощо), надаючи розробнику повністю готову платформу "з коробки".
У цьому гайді ви дізнаєтеся, як використовувати PHP-середовище, Composer та сервіси баз даних ServBay для створення та запуску базового проекту Yii 2. Також ми використаємо функцію "Сайти" для конфігурації локального веб-сервера та реалізуємо доступ і демонстрацію основних можливостей проекту.
Перед стартом
Перед початком переконайтеся, що ви:
- Встановили та запустили ServBay на macOS або Windows.
- Активували потрібну версію PHP (наприклад, PHP 8.3 або новіше).
- Активували обрані сервіси баз даних (MySQL чи PostgreSQL) та кешування (Memcached і Redis).
Інформацію про встановлені пакети та їх статус можна переглянути і змінити просто в основному інтерфейсі ServBay.
Створення проекту Yii 2
TIP
ServBay рекомендує розміщувати проектні файли у таких каталогах для порядку структур та зручного керування через розділ "Сайти":
- macOS:
/Applications/ServBay/www - Windows:
C:\ServBay\www
Composer: Composer вже інтегровано в ServBay, окремо встановлювати не потрібно. Команду
composerможна використовувати прямо в терміналі.Створення каталогу для проекту: Відкрийте термінал, перейдіть у корінь сайтів і створіть новий каталог для проекту.
macOS:
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app1
2
3Windows:
cmdcd C:\ServBay\www mkdir servbay-yii2-app cd servbay-yii2-app1
2
3Створення проекту Yii 2 через Composer: Виконайте команду в каталозі
servbay-yii2-app, щоб створити Yii 2 базову структуру:bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .1Після запуску Composer завантажить весь код базового шаблону та залежності у поточний каталог (
.). Дочекайтеся завершення процесу.Перехід до каталогу проекту: Переконайтеся, що ви перебуваєте в корені створеного проекту — подальші команди виконуються саме там.
macOS:
bashcd /Applications/ServBay/www/servbay-yii2-app1Windows:
cmdcd C:\ServBay\www\servbay-yii2-app1
Початкові налаштування
Після створення проекту Yii 2 слід налаштувати підключення до бази даних та компоненти кешу.
Налаштування підключення до БД: Змініть файл
config/db.phpу корені проекту відповідно до обраного сервісу (MySQL або PostgreSQL) і його налаштувань (типовий користувач —root, пароль —password— якщо не змінювали).Спершу створіть нову базу даних для проекту у відповідній СУБД ServBay, наприклад,
servbay_yii2_app. Це можна виконати через Adminer (вбудований у ServBay) або улюблений клієнт для БД (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відповідно до своїх налаштувань.Налаштування Memcached та 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 має встановити мінімальні залежності, додаткові — через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). Переконайтеся, що вона є та активна в ServBay. - Корінь сайту: ВАЖЛИВО! У базовому шаблоні 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 чи 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 set successfully. Retrieved value: " . $value);
} else {
return $this->asText("Failed to set data in Memcached. Please check Memcached service and configuration.");
}
}
/**
* 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 set successfully. Retrieved value: " . $value);
} else {
return $this->asText("Failed to set data in Redis. Please check Redis service and configuration.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Redis error: " . $e->getMessage() . ". Please check Redis service and configuration.");
}
}
/**
* 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' => 'demo-user@servbay.test', // Демонстраційний email
])->execute();
return $this->asText("User added successfully. Rows affected: " . $count);
} catch (DbException $e) {
return $this->asText("Failed to add user to database. Error: " . $e->getMessage() . ". Please check database service, configuration, and ensure 'users' table exists.");
}
}
/**
* 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 = "Fetched Users:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, Name: {$user['name']}, Email: {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("Failed to fetch users from database. Error: " . $e->getMessage() . ". Please check database service, configuration, and ensure 'users' table exists.");
}
}
// Якщо використовуєте PostgreSQL, можна додати окремі методи, але загалом 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 реалізовано обробку помилок та змінено формат виводу для кращої читабельності. Демо-дані та 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 = 'My Yii2 Application on ServBay'; // Оновлений заголовок
?>
<div class="site-index">
<div class="jumbotron">
<h1>Congratulations!</h1>
<p class="lead">You have successfully created your Yii2 application and configured it with ServBay!</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Get started with Yii</a></p>
</div>
<div class="body-content">
<h2>Demonstrations</h2>
<ul>
<li><a href="<?= Html::toRoute('site/memcached') ?>">Test Memcached</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Test Redis</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">Add a user to DB</a> (Requires 'users' table)</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Fetch users from DB</a> (Requires 'users' table)</li>
</ul>
<p>Please ensure Memcached, Redis, and your chosen database (MySQL/PostgreSQL) services are running in ServBay and configured correctly in `config/web.php` and `config/db.php`.</p>
<p>For database examples, you need to create the 'users' table using Yii migrations (see below).</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_table1Підтвердьте створення файлу (введіть
yes). Міграція буде записана у каталогmigrationsпід ім’ям типуmYYYYMMDD_HHMMSS_create_users_table.php.- macOS:
Відредагуйте файл міграції — визначте структуру таблиці у методі
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'), ]); // Опціонально: індекси для ефективності $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 migrate1Підтвердьте виконання (
yes). Якщо все зроблено правильно, побачите повідомлення про успішне створення таблиці.
Тестування сайту
Тепер ви можете відкрити браузер та перейти на налаштований домен: https://servbay-yii2-test.local.
- Відвідайте
https://servbay-yii2-test.local— побачите стартову сторінку Yii 2 і демо-лінки. - Натисніть "Test Memcached" або введіть
https://servbay-yii2-test.local/index.php?r=site/memcached— якщо Memcached працює, буде текст "Memcached set successfully...". - Натисніть "Test Redis" або
https://servbay-yii2-test.local/index.php?r=site/redis— при правильно налаштованому Redis буде "Redis set successfully...". - Натисніть "Add a user to DB" або
https://servbay-yii2-test.local/index.php?r=site/mysql-add— якщо БД працює і є таблиця, додасться користувач, з’явиться повідомлення про успіх. - Натисніть "Fetch users from DB" або
https://servbay-yii2-test.local/index.php?r=site/mysql— побачите список користувачів із таблиці.
Якщо виникнуть труднощі — перевірте, чи працюють і правильно налаштовані PHP, веб-сервер, БД, Memcached, Redis у ServBay, чи коректні налаштування конфігів проекту (config/db.php, config/web.php), і чи успішно створена таблиця у БД.
Відповіді на поширені питання (FAQ)
- Чому сайт недоступний або виникає помилка сертифіката? Перевірте, чи додано правильний домен у налаштуваннях "Сайтів" ServBay і чи сама програма ServBay запущена. ServBay конфігурує локальний DNS та SSL автоматично. Якщо помилка сертифіката — переконайтеся, що довірили ServBay User CA чи Public CA, згідно гіду.
- Не працюють команди Composer? Перевірте активацію пакета Composer у ServBay та чи працюєте в терміналі на macOS. ServBay додає Composer до вашого PATH.
- Не вдається підключитися до бази даних? Перевірте, що БД (MySQL/PostgreSQL) активна у ServBay. Перевірте
dsn,username,passwordуconfig/db.php. Упевніться, що база створена (наприклад,servbay_yii2_app). Перевірити/створити її можна через Adminer. - Немає з'єднання з Memcached/Redis? Переконайтеся, що відповідні сервіси активні, а параметри
hostтаportуconfig/web.php— правильні (типово127.0.0.1і стандартний порт). - Міграція бази даних (
php yii migrate) не виконується? Переконайтеся у коректності конфігураціїconfig/db.php, роботі БД та створеній базі. - Метод
actionMysqlAddчиactionMysqlповідомляє, що таблиці нема? Не забудьте виконати міграцію командоюphp yii migrate. - Де подивитися log-файли PHP? Всі логи — PHP, веб-сервера тощо — зібрано у розділі "Логи" інтерфейсу ServBay.
Висновок
Завдяки ServBay ви можете легко розгорнути повноцінне локальне середовище для запуску проектів Yii 2 на macOS або Windows. Вбудований Composer, менеджер версій PHP, інтегровані бази даних, кеш-сервіси та зручний конфігуратор сайтів значно спрощують процес розробки. Спираючись на цей гід, ви зможете швидко стартувати з Yii 2 і ефективно використовувати всі переваги ServBay.
Бажаємо приємної розробки!
