Створення та запуск проекту CodeIgniter
Що таке CodeIgniter?
CodeIgniter — це легкий і високопродуктивний каркас для розробки PHP веб-додатків. Він дотримується шаблону Model-View-Controller (MVC) та призначений для того, щоб допомагати розробникам швидко створювати функціональні веб-додатки. Завдяки простій структурі, відмінній продуктивності та легкості у вивченні CodeIgniter став одним із найпопулярніших фреймворків серед PHP-розробників.
Основні особливості та переваги CodeIgniter
- Легке ядро: Ядро CodeIgniter максимально спрощене й містить лише основні компоненти, необхідні для запуску, що забезпечує надзвичайно швидке завантаження.
- Висока продуктивність: Архітектура фреймворку орієнтована на максимальну ефективність — CodeIgniter легко справляється з високим навантаженням і забезпечує відмінну продуктивність.
- Легкий старт: Докладна документація й інтуїтивний API дозволяють швидко навчитися й почати роботу.
- Гнучкість: Розробник може вільно обирати та підключати сторонні бібліотеки, розширюючи й налаштовуючи функціонал проекту для своїх потреб.
- Активна спільнота: CodeIgniter має потужну спільноту, що забезпечує підтримку і багатий вибір ресурсів.
CodeIgniter прекрасно підходить для проектів будь-якого розміру — від невеликих сайтів до корпоративних систем, допомагаючи розробникам створювати якісні веб-рішення максимально ефективно.
Налаштування середовища розробки CodeIgniter з ServBay
ServBay — це інструмент для локального web-розробки, розроблений спеціально для macOS. Він інтегрує PHP, бази даних (MySQL, PostgreSQL, MongoDB), кеш-сервіси (Redis, Memcached), web-сервери (Caddy, Nginx, Apache) та інші компоненти, а також надає зручний інтерфейс для їх керування. З допомогою ServBay ви легко зможете створити та керувати середовищем для розробки на CodeIgniter.
У цьому матеріалі розглянемо, як за допомогою PHP-оточення та інструменту Сайти від ServBay створити, налаштувати й запустити проект CodeIgniter з інтеграцією різних баз даних і кеш-сервісів.
Необхідні передумови
Перед початком переконайтеся, що виконані наступні умови:
- ServBay успішно встановлено і запущено на вашій macOS.
- В ServBay активована потрібна версія PHP (наприклад, PHP 8.3).
- В ServBay активовані бази даних і кеш-пакети, які ви будете використовувати (наприклад, MySQL, PostgreSQL, Redis, Memcached).
Створення проекту CodeIgniter
Рекомендується зберігати ваші web-проекти у каталозі /Applications/ServBay/www
, адже так ServBay зможе найкраще організувати локальні сайти.
Встановіть Composer
При встановленні ServBay Composer вже включено, тому вручну його ставити зазвичай не потрібно. Ви можете використовувати команду
composer
у терміналі відразу.Перейдіть до каталогу сайтів
Відкрийте термінал і виконайте перехід рекомендованого кореневого каталогу сайтів ServBay:
bashcd /Applications/ServBay/www
1Створіть проект CodeIgniter
Створіть новий проект CodeIgniter 4 за допомогою Composer. Назвемо каталог проекту
servbay-codeigniter-app
:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composer завантажить структуру CodeIgniter із залежностями у папку
servbay-codeigniter-app
.Перейдіть до каталогу проекту
Увійдіть до щойно створеного проекту CodeIgniter:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1
Початкова конфігурація
Налаштування підключення до бази даних
Конфігурація бази даних у CodeIgniter знаходиться у файлі app/Config/Database.php
. Перш ніж працювати із базою, вкажіть у цьому файлі параметри підключення.
По-перше, якщо ви плануєте використовувати базу даних, створіть БД з назвою servbay_codeigniter_app
за допомогою інструментів ServBay для адміністрування (наприклад, Adminer чи phpMyAdmin — доступно з інтерфейсу ServBay).
Далі відредагуйте файл app/Config/Database.php
, знайдіть масив $default
і впишіть параметри підключення залежно від обраної у ServBay бази даних (наприклад, MySQL чи PostgreSQL). Зазвичай у ServBay ім’я користувача БД — root
, пароль — password
.
Ось приклад конфігурації для MySQL:
php
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // MySQL у ServBay зазвичай слухає на 127.0.0.1
'username' => 'root', // Стандартний користувач ServBay
'password' => 'password', // Стандартний пароль ServBay
'database' => 'servbay_codeigniter_app', // Назва створеної БД
'DBDriver' => 'MySQLi', // Вкажіть тип драйверу, для MySQL — MySQLi або PDO
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306, // Стандартний порт MySQL
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Для PostgreSQL значення DBDriver
повинно бути 'Postgre'
, port
зазвичай рівний 5432
, а параметри кодування можуть відрізнятися.
Налаштування кешу (Memcached/Redis)
Якщо ви плануєте використовувати Memcached або Redis як сховище кешу, налаштуйте файл app/Config/Cache.php
.
Відкрийте app/Config/Cache.php
і знайдіть відповідні секції. За замовчуванням у ServBay Memcached використовує порт 11211
, Redis — 6379
, як правило, без пароля.
Приклад конфігурації Memcached:
php
public $memcached = [
'host' => '127.0.0.1', // Memcached у ServBay слухає на 127.0.0.1
'port' => 11211, // Стандартний порт Memcached
'weight' => 1,
];
1
2
3
4
5
2
3
4
5
Приклад для Redis:
php
public string $handler = 'redis'; // Основний обробник кешу — redis
public $default = [ // Налаштування Redis у default-масиві
'host' => '127.0.0.1', // Сервер Redis у ServBay
'password' => null, // У ServBay Redis зазвичай без пароля
'port' => 6379, // Стандартний порт Redis
'timeout' => 0,
'database' => 0,
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Зверніть увагу: налаштуйте саме ті сервіси, які ввімкнені у ServBay.
Налаштування web-сервера (використання Сайтів у ServBay)
За допомогою функції Сайти в ServBay ви можете налаштувати web-сервер, щоб він вказував на ваш проект CodeIgniter.
- Запустіть інтерфейс програми ServBay.
- Відкрийте вкладку Сайти (Websites).
- Натисніть кнопку
+
у нижньому лівому куті для створення нового сайту. - Заповніть поля:
- Назва (Name): придумайте характерну назву, наприклад,
My First CodeIgniter Dev Site
. - Домен (Domain): вкажіть домен для локального браузера, наприклад,
servbay-codeigniter-test.local
. ServBay автоматично призначить.local
як локальний домен. - Тип сайту (Site Type): оберіть
PHP
. - Версія PHP (PHP Version): потрібна версія PHP, наприклад,
8.3
. - Корінь документа (Document Root): тут потрібно бути уважним. Файл входу CodeIgniter (
index.php
) знаходиться у папціpublic
проекту. Тому коренем сайту обирайте саме папкуpublic
вашого проекту:/Applications/ServBay/www/servbay-codeigniter-app/public
.
- Назва (Name): придумайте характерну назву, наприклад,
- Натисніть Додати (Add) для збереження.
- ServBay може запропонувати застосувати зміни — підтвердьте.
Детальніше дивіться у Додавання першого сайту.
Додавання прикладів коду
Для тестування запуску проекту, підключення до бази даних і кешу, змініть контролер CodeIgniter Home
, додавши кілька демонстраційних методів.
Відредагуйте файл app/Controllers/Home.php
і замініть його код на такий:
php
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Імпорт класу виключень БД
use CodeIgniter\Cache\Exceptions\CacheException; // Імпорт класу виключень кеша
class Home extends Controller
{
/**
* Метод головної сторінки
*/
public function index(): string
{
// Проста сторінка привітання
return '<h1>Hello ServBay and CodeIgniter!</h1><p>Your CodeIgniter project is running on ServBay.</p>';
}
/**
* Приклад використання Memcached
*/
public function memcached(): string
{
try {
$cache = \Config\Services::cache();
// Спроба зберегти значення у Memcached
$success = $cache->save('servbay_memcached_key', 'Hello Memcached from CodeIgniter!', 60); // Кеш на 60 секунд
if (!$success) {
return 'Error: Failed to save data to Memcached. Check Memcached service and configuration.';
}
// Спроба отримати значення з Memcached
$value = $cache->get('servbay_memcached_key');
if ($value === null) {
return 'Error: Failed to get data from Memcached. Cache might have expired or service is down.';
}
return 'Memcached Test Success: ' . $value;
} catch (CacheException $e) {
// Обробка кеш-винятків
return 'Cache Error: ' . $e->getMessage() . '. Ensure Memcached service is running and configured correctly.';
} catch (\Exception $e) {
// Обробка інших винятків
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Приклад використання Redis
*/
public function redis(): string
{
try {
$cache = \Config\Services::cache();
// Спроба зберегти значення у Redis
$success = $cache->save('servbay_redis_key', 'Hello Redis from CodeIgniter!', 60); // Кеш на 60 секунд
if (!$success) {
return 'Error: Failed to save data to Redis. Check Redis service and configuration.';
}
// Спроба отримати значення з Redis
$value = $cache->get('servbay_redis_key');
if ($value === null) {
return 'Error: Failed to get data from Redis. Cache might have expired or service is down.';
}
return 'Redis Test Success: ' . $value;
} catch (CacheException $e) {
// Обробка кеш-винятків
return 'Cache Error: ' . $e->getMessage() . '. Ensure Redis service is running and configured correctly.';
} catch (\Exception $e) {
// Обробка інших винятків
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Додавання користувача у базу даних (MySQL/PostgreSQL)
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// Перевірка, чи існує таблиця 'users'
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Додавання нового користувача
$data = [
'name' => 'ServBay Demo User',
'email' => 'user_' . time() . '@servbay.demo', // Унікальний email за допомогою time()
];
$db->table('users')->insert($data);
// Можна перевірити чи вставка пройшла успішно (зазвичай insert() повертає true)
// if ($db->affectedRows() > 0) {
return 'User added successfully: ' . $data['email'];
// } else {
// return 'Error: Failed to add user.';
// }
} catch (DatabaseException $e) {
// Обробка винятків БД
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Обробка інших винятків
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Отримання всіх користувачів із бази (MySQL/PostgreSQL)
*/
public function listUsers(): string
{
try {
$db = \Config\Database::connect();
// Перевірка наявності таблиці 'users'
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Отримати всіх користувачів
$users = $db->table('users')->get()->getResult();
if (empty($users)) {
return 'No users found in the database.';
}
// Повернути JSON-список користувачів
return json_encode($users);
} catch (DatabaseException $e) {
// Обробка винятків бази
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Обробка інших винятків
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
}
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
Оновлений контролер забезпечує зрозумілий вивід і базову обробку помилок для простої діагностики.
Налаштування роутінгу
Щоб отримати доступ до прикладів, доданих у контролері Home
, додайте відповідні маршрути у файл роутінгу CodeIgniter.
Відкрийте файл app/Config/Routes.php
, знайдіть місце, де визначається $routes
, і додайте такі правила:
php
// ... інші правила ...
// Приклад маршруту для Memcached
$routes->get('/memcached', 'Home::memcached');
// Приклад маршруту для Redis
$routes->get('/redis', 'Home::redis');
// Приклад маршруту для БД
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... інші маршрути ...
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
Вставляйте ці правила у вже існуючий масив $routes
, не видаляючи попередні налаштування.
Перевірка роботи сайту
Тепер ваш проект CodeIgniter повністю налаштований в оточенні ServBay. Відкрийте браузер і перейдіть за вказаним раніше доменом:
Головна сторінка:
https://servbay-codeigniter-test.local
Якщо ви бачите написHello ServBay and CodeIgniter!
, сайт працює коректно через web-сервер ServBay.Приклад Memcached:
https://servbay-codeigniter-test.local/memcached
Якщо Memcached налаштований вірно, побачите щось на кшталтMemcached Test Success: Hello Memcached from CodeIgniter!
.Приклад Redis:
https://servbay-codeigniter-test.local/redis
При правильній конфігурації Redis ви маєте побачити:Redis Test Success: Hello Redis from CodeIgniter!
.
Приклади операцій з базою (MySQL/PostgreSQL)
Перед використанням прикладів із базою даних потрібно виконати команду міграції CodeIgniter для створення таблиці users
.
Створення структури БД (міграція)
Відкрийте термінал і перейдіть до каталогу проекту:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Створіть файл міграції: Використайте CLI CodeIgniter для генерації файлу міграції:
bashphp spark make:migration create_users_table
1В результаті у
app/Database/Migrations
з’явиться новий PHP-файл.Відредагуйте файл міграції: Відкрийте новостворений файл (назва на кшталт
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
) і вкажіть у методіup()
структуру таблиціusers
. Зауважте, що в MySQL та PostgreSQL різний синтаксис для значень часу (CURRENT_TIMESTAMP
тощо). CodeIgniter дозволяє використовуватиRawSql
для цього. Приклад:php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // Додайте RawSql class CreateUsersTable extends Migration { public function up() { $this->forge->addField([ 'id' => [ 'type' => 'INT', 'constraint' => 5, 'unsigned' => true, 'auto_increment' => true, ], 'name' => [ 'type' => 'VARCHAR', 'constraint' => '100', ], 'email' => [ 'type' => 'VARCHAR', 'constraint' => '100', 'unique' => true, // Email має бути унікальним ], 'created_at' => [ 'type' => 'TIMESTAMP', // Для різних БД різні значення за замовчуванням // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP' : 'NOW()'), ], 'updated_at' => [ 'type' => 'TIMESTAMP', // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' : 'NOW()'), ], ]); $this->forge->addKey('id', true); // Основний ключ — id $this->forge->createTable('users'); } public function down() { // Операція rollback — видалення users $this->forge->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
47
48
49
50
51Примітка: Логіка обирає правильний синтаксис часу в залежності від БД. У складних проєктах може знадобитися гнучкіша стратегія або окремі міграції.
Виконайте міграцію: Запустіть команду в терміналі для створення таблиці:
bashphp spark migrate
1У разі успіху ви побачите відповідне повідомлення, а у вашій БД з’явиться таблиця
users
(це можна перевірити через, наприклад, Adminer у ServBay).
Перевірка роботи з базою
Переконайтеся, що у файлі app/Config/Database.php
підключення налаштовано коректно, а міграцію виконано.
Додати користувача у БД: перейдіть за URL
https://servbay-codeigniter-test.local/add-user
Кожне відвідування створює новий запис у таблиціusers
. Ви побачите щось на зразокUser added successfully: [email protected]
.Список користувачів у БД: перейдіть за адресою
https://servbay-codeigniter-test.local/list-users
При цьому відобразиться JSON-масив усіх користувачів із таблиці.
Висновок
Виконавши вказані кроки, ви успішно створили, налаштували й запустили проект CodeIgniter у середовищі ServBay на macOS. Ви дізналися, як швидко створити проект із Composer, налаштувати веб-сайт у ServBay для правильного роутингу, сконфігурувати підключення до бази даних і кеш-сервісів, а також як протестувати інтеграцію простим прикладом. ServBay значно спрощує створення й керування локальним середовищем, дозволяючи зосередитися безпосередньо на розробці додатка.