Створення та запуск проєкту Yii 2 у ServBay
Огляд: Що таке Yii 2?
Yii 2 — це високопродуктивний PHP-фреймворк, побудований на основі компонентної архітектури, призначений для швидкої розробки сучасних веб-додатків. Він реалізує патерн MVC (Model-View-Controller), пропонує розвинений набір функцій та інструментів, що допомагають розробникам ефективно створювати масштабовані й якісні веб-додатки. Популярність Yii 2 забезпечується його продуктивністю, гнучкою архітектурою та потужними вбудованими можливостями — кешування, безпека, підтримка рестфул-API тощо.
Основні можливості та переваги Yii 2
- Висока продуктивність: Yii 2 оптимізований для обробки великої кількості одночасних запитів — ідеально підходить для написання високопродуктивних додатків.
- Модульність: Архітектура фреймворка максимально модульна, що спрощує організацію коду та повторне використання компонентів.
- Безпека: Вбудовано багато сучасних механізмів захисту, включаючи валідацію входу, фільтрацію виводу, захист від CSRF/XSS, комплексну систему аутентифікації й авторизації.
- Легкість у використанні: Інтуїтивний API і докладна документація дозволяють швидко освоїти Yii 2 навіть новачкам.
- Потужна спільнота: Активна розробницька спільнота та величезна колекція сторонніх розширень — легко знайти допомогу чи потрібний пакет.
- Інтегровані інструменти: У комплекті командний інтерфейс для міграцій бази даних, генерації коду тощо — це підвищує ефективність розробки.
Yii 2 — відмінний вибір для створення корпоративних рішень, RESTful-API, портальних та будь-яких інших веб-проєктів.
Запуск проєкту Yii 2 у ServBay
ServBay — це локальне середовище веб-розробки для macOS, що включає PHP, різні СУБД (MySQL, PostgreSQL, MongoDB, Redis), веб-сервери (Caddy, Nginx) і утиліти для розробників (Composer, Node.js, Python, Go, Java та інші). ServBay надає готову до роботи платформу для зручної локальної розробки.
У цьому посібнику ви дізнаєтеся, як створити й запустити базовий застосунок Yii 2 за допомогою інтегрованого PHP-середовища ServBay, інструменту Composer і сервісів баз даних. Ми використаємо функцію “Вебсайти” в ServBay для налаштування серверної частини й продемонструємо основні можливості.
Передумови
Перед початком переконайтеся, що ви:
- Встановили й успішно запустили ServBay на macOS.
- Встановили та активували потрібну вам версію PHP у ServBay (наприклад, PHP 8.3 або новіше).
- Встановили та запустили вибрані служби баз даних (MySQL або PostgreSQL) і кешування (Memcached і Redis) у ServBay.
Всі встановлені пакети та поточний стан сервісів можна переглянути й керувати ними у головному інтерфейсі ServBay.
Створення проєкту Yii 2
TIP
ServBay рекомендує розміщувати проєкти у каталозі /Applications/ServBay/www
. Це допоможе підтримувати порядок і спростить управління сайтами через функцію “Вебсайти”.
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
виконайте команду Composer для створення нового базового застосунку Yii 2:bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Ця команда завантажить шаблон базового застосунку Yii 2 та його залежності у поточну папку (
.
). Дочекайтеся завершення інсталяції.Перейдіть у каталог проєкту: Переконайтеся, що працюєте у каталозі
/Applications/ServBay/www/servbay-yii2-app
— далі всі команди треба виконувати тут.bashcd /Applications/ServBay/www/servbay-yii2-app
1
Початкове налаштування
Після створення проєкту Yii 2 потрібно виконати декілька базових налаштувань, головним чином — підключення до бази даних та налаштування компонентів.
Налаштуйте підключення до бази даних: Відредагуйте файл
config/db.php
. На основі сервісу баз даних, який ви використовуєте у ServBay (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', // Рекомендується використовувати 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. За замовчуванням у ServBay 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, ], // ... інші компоненти ], // ... інші параметри
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: Відкрийте ServBay.
- Перейдіть у розділ “Вебсайти”: Знайдіть і натисніть пункт меню “Вебсайти” чи подібний.
- Додайте новий сайт: Натисніть кнопку додавання сайту (зазвичай це
+
або “Додати”). - Заповніть параметри сайту:
- Назва: Укажіть зручну для ідентифікації назву, наприклад,
My First Yii 2 Dev Site
. - Домен: Вкажіть локальний домен, за яким ви звертатиметеся до сайту. Наприклад,
servbay-yii2-test.local
. ServBay автоматично налаштує локальний DNS та зв’яже домен з127.0.0.1
. - Тип сайту: Оберіть
PHP
. - Версія PHP: Виберіть потрібну версію PHP (наприклад,
8.3
) — вона має бути активована у ServBay. - Кореневий каталог сайту: Це дуже важливо! Для базового застосунку Yii 2 публічна точка входу — папка
web
у корені проєкту. Тому вкажіть:/Applications/ServBay/www/servbay-yii2-app/web
.
- Назва: Укажіть зручну для ідентифікації назву, наприклад,
- Збережіть і застосуйте налаштування: Після збереження 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
{
/**
* 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' => '[email protected]', // Демонстраційний 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">Ви успішно створили застосунок 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' (див. нижче про міграції).</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
та Enter. Міграційний файл з'явиться у папці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'), ]); // Опційно: створити індекс для швидкого пошуку $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
. Якщо все вірно — таблиця буде створена.
Відкрийте сайт у браузері й протестуйте
Тепер відкрийте у браузері адресу, яку ви вказували при налаштуванні у ServBay, наприклад: https://servbay-yii2-test.local
.
- Відвідайте головну сторінку — побачите вітання базового застосунку Yii 2 з нашими демонстраційними лінками.
- Натисніть "Перевірити Memcached" або перейдіть за адресою
https://servbay-yii2-test.local/index.php?r=site/memcached
: якщо Memcached працює і налаштовано правильно, ви побачите повідомлення "Memcached set successfully...". - Натисніть "Перевірити Redis" або перейдіть за адресою
https://servbay-yii2-test.local/index.php?r=site/redis
: якщо Redis працює і налаштовано правильно, побачите "Redis set successfully...". - Натисніть "Додати користувача у БД" або перейдіть за адресою
https://servbay-yii2-test.local/index.php?r=site/mysql-add
: в разі належного запуску та налаштування БД й наявності таблиці — "User added successfully...". Кожен клік додає нового користувача (хіба що email вже існує та є унікальним). - Натисніть "Отримати користувачів з БД" або навідайтесь на
https://servbay-yii2-test.local/index.php?r=site/mysql
: у випадку правильної роботи БД з’явиться список користувачів у таблиціusers
.
Якщо виникли проблеми — перевірте, чи працюють потрібні сервіси (PHP, веб-сервіс, база, Memcached, Redis), перевірте правильність налаштувань у файлах config/db.php
і config/web.php
та наявність таблиці у базі.
Часті питання (FAQ)
- Чому при спробі зайти на сайт з’являється “Сайт недоступний” або помилка сертифіката? Переконайтеся, що в налаштуваннях ServBay для сайта вказано правильний домен і сам додаток запущений. ServBay автоматично налаштовує локальний DNS і виписує SSL-сертифікат. Якщо є помилка із сертифікатом — перевірте, чи ви довірили ServBay User CA або ServBay 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
, щоб створити таблицюusers
. - Де подивитись логи PHP? Усі логи (PHP, веб-сервера тощо) доступні у розділі “Журнали” інтерфейсу ServBay — це допомагає в усуненні проблем.
Підсумок
Завдяки ServBay ви можете швидко та зручно налаштувати повноцінне локальне середовище для розробки Yii 2-проєктів на macOS. Composer, керування версіями PHP, вбудовані сервіси БД та кешування, зручна система сайтів — усе це значно спрощує розробку на Yii 2. Дотримуючись цього посібника, ви зможете швидко переконатися у простоті налаштування середовища й запуку проєктів, а також використати всі можливості ServBay для підвищення власної продуктивності.
Успіхів у розробці!