Створення та запуск проекту CodeIgniter
Що таке CodeIgniter?
CodeIgniter — це легкий та високопродуктивний PHP-фреймворк для розробки веб-додатків. Він дотримується патерну Model-View-Controller (MVC) та дозволяє розробникам швидко створювати функціональні веб-рішення. CodeIgniter вирізняється своєю простою структурою, чудовою продуктивністю і легкістю вивчення, що робить його популярним вибором серед PHP-розробників.
Основні переваги та особливості CodeIgniter
- Легка основа: Ядро CodeIgniter мінімалістичне, містить лише необхідні компоненти, завдяки чому швидко завантажується.
- Висока продуктивність: Архітектура фреймворку оптимізована для ефективності та підтримує роботу з великим навантаженням.
- Простота старту: Відмінна документація та зручний API дозволяють швидко освоїти фреймворк навіть новачкам.
- Гнучкість: Легко підключати сторонні бібліотеки та розширення для налаштування під потреби проекту.
- Активна спільнота: Велика база користувачів, багато корисних ресурсів і швидка підтримка.
CodeIgniter підходить для проектів різного масштабу — від невеликих до корпоративних систем — і допомагає ефективно будувати якісні веб-рішення.
Налаштування середовища розробки CodeIgniter з ServBay
ServBay — це сучасний локальний інструмент для розробки веб-сайтів на macOS і Windows, який містить PHP, бази даних (MySQL, PostgreSQL, MongoDB), кеші (Redis, Memcached), веб-сервери (Caddy, Nginx, Apache) та зручний інтерфейс управління. Завдяки ServBay ви легко організуєте середовище для роботи з CodeIgniter.
У цьому матеріалі ми покажемо, як використовувати PHP-оточення та функціонал Сайтів ServBay для створення, налаштування і запуску проекту CodeIgniter, а також продемонструємо інтеграцію з кількома базами даних та кешами.
Передумови
Перш ніж почати, переконайтеся, що:
- Ви встановили та запустили ServBay на macOS або Windows.
- У ServBay активовано потрібну версію PHP (наприклад, PHP 8.3).
- У ServBay активовано відповідні бази даних і кеші (наприклад, MySQL, PostgreSQL, Redis, Memcached).
Створення проекту CodeIgniter
ServBay рекомендує зберігати сайти у таких директоріях для зручного менеджменту:
- macOS:
/Applications/ServBay/www - Windows:
C:\ServBay\www
Встановіть Composer
ServBay уже містить Composer після інсталяції, тож додаткових дій не потрібно. Просто використовуйте команду
composerв терміналі.Перейдіть у корінь сайтів
Відкрийте термінал і перейдіть до папки, яку рекомендує ServBay:
macOS:
bashcd /Applications/ServBay/www1Windows:
cmdcd C:\ServBay\www1Створіть проект CodeIgniter
Запустіть Composer для створення нового проекту CodeIgniter 4. Назвемо директорію проекту
servbay-codeigniter-app:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app1Composer завантажить каркас CodeIgniter та необхідні залежності в обраний каталог.
Перейдіть у директорію проекту
Перейдіть у щойно створену директорію проекту CodeIgniter:
macOS:
bashcd /Applications/ServBay/www/servbay-codeigniter-app1Windows:
cmdcd C:\ServBay\www\servbay-codeigniter-app1
Початкова конфігурація
Налаштування підключення до бази даних
Конфігурація бази даних CodeIgniter міститься у файлі app/Config/Database.php. Перш ніж працювати з базою даних, внесіть дані для підключення у цьому файлі.
Спочатку створіть базу даних servbay_codeigniter_app через менеджер ServBay (наприклад, Adminer чи phpMyAdmin — доступні через інтерфейс ServBay).
Після цього відкрийте файл app/Config/Database.php, оберіть масив $default і внесіть відповідні дані згідно типу бази даних (MySQL або PostgreSQL), що працює у ServBay. За замовчуванням ім’я користувача й пароль ServBay — root і password.
Приклад налаштувань для MySQL:
php
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // База даних 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', типово порт — 5432, може також знадобитися уточнити параметри кодування.
Налаштування кешу (Memcached/Redis)
Якщо ви плануєте використовувати Memcached чи Redis як кеш, відредагуйте файл app/Config/Cache.php.
В сервісі ServBay Memcached слухає на порту 11211 (за замовчуванням), а Redis — на 6379, і зазвичай не вимагає пароля.
Приклад налаштувань для Memcached:
php
public $memcached = [
'host' => '127.0.0.1', // Memcached на 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 на локальному хості
'password' => null, // За замовчуванням без пароля
'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.
Налаштування веб-сервера (Сайт ServBay)
Щоб підключити веб-сервер до вашого проекту CodeIgniter, використовуйте функцію Сайти у ServBay.
- Відкрийте інтерфейс ServBay.
- Перейдіть на вкладку Сайти (Websites).
- Натисніть кнопку
+у лівому нижньому куті для створення нового сайту. - Заповніть інформацію:
- Ім’я (Name): Вкажіть зрозумілу назву, наприклад
My First CodeIgniter Dev Site. - Домен (Domain): Вкажіть домен для локального доступу, наприклад
servbay-codeigniter-test.local. ServBay автоматично підключає.localдо вашого комп’ютера. - Тип сайту (Site Type): Оберіть
PHP. - Версія PHP (PHP Version): Оберіть потрібну версію, наприклад
8.3. - Корінь сайту (Document Root): Дуже важливо: вхідний файл CodeIgniter (
index.php) знаходиться у теціpublicвашого проекту. Тому корінь сайту слід встановити на папкуpublicу вашому проекті:/Applications/ServBay/www/servbay-codeigniter-app/public.
- Ім’я (Name): Вкажіть зрозумілу назву, наприклад
- Натисніть Додати (Add) для збереження.
- Якщо ServBay попросить підтвердити зміни — погоджуйтесь.
Детальну інструкцію дивіться Додавання першого сайту.
Додавання демонстраційного коду
Щоб перевірити роботу проекту, а також протестувати підключення до бази даних і кешу, відредагуємо контролер Home у CodeIgniter.
Відкрийте файл 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();
// Пробуємо записати кеш
$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.';
}
// Читаємо з кешу
$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);
// Перевірка успішності вставки (опціонально)
// 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
Цей контролер містить простий вивід і базову обробку помилок для діагностики.
Налаштування маршрутів
Щоб мати змогу переходити за URL-адресами до щойно доданих методів у контролері Home, потрібно додати маршрути до файлу 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!, що свідчить про коректну роботу проекту на веб-сервері 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)
Перед тим як користуватися тестовими методами для бази даних, необхідно створити таблицю users за допомогою міграцій CodeIgniter.
Створення структури бази (запуск міграції)
Відкрийте термінал, перейдіть у директорію проекту CodeIgniter:
bashcd /Applications/ServBay/www/servbay-codeigniter-app1Створіть файл міграції: Запустіть CLI CodeIgniter для створення міграції таблиці
users:bashphp spark make:migration create_users_table1У папці
app/Database/Migrationsз’явиться новий PHP-файл.Відредагуйте міграцію: Відкрийте новий файл (наприклад,
YYYY-MM-DD-HHMMSS_CreateUsersTable.php) і заповніть методup()так, щоб створити потрібні поля. Зверніть увагу: в MySQL і PostgreSQL відрізняється синтаксис для автоматичних часових міток (CURRENT_TIMESTAMPтаNOW()), і 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'); // Створити таблицю users } public function down() { // Відкат міграції, видалити 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 migrate1Після успіху ви побачите повідомлення, а через менеджер бази в ServBay зможете перевірити наявність таблиці.
Тестування роботи з базою
Переконайтеся, що коректно налаштовано підключення у app/Config/Database.php і міграції вже застосовано.
Додавання користувача: Перейдіть на
https://servbay-codeigniter-test.local/add-userПри кожному відвідуванні буде додано нового користувача й відображено повідомлення типуUser added successfully: user_XXXXXXXXXX@servbay.demo.Список користувачів: Перейдіть на
https://servbay-codeigniter-test.local/list-usersВи побачите JSON-масив з усіма користувачами з таблиціusers.
Підсумок
Тепер ви знаєте, як створити, налаштувати і запустити проект CodeIgniter у середовищі ServBay на macOS або Windows. Ви навчилися використовувати Composer для ініціалізації проекту, налаштовувати функцію Сайт ServBay, коректно встановлювати підключення до бази даних і кешу у CodeIgniter, а також перевіряти їхню роботу через демонстраційний код. ServBay значно спрощує процес локальної розробки, дозволяючи вам зосередитися на основній роботі з вашим PHP-проектом на CodeIgniter!
