Создание и запуск проекта CodeIgniter
Что такое CodeIgniter?
CodeIgniter — это легковесный и высокопроизводительный фреймворк для разработки веб-приложений на PHP. Он реализует паттерн Model-View-Controller (MVC) и позволяет разработчикам быстро создавать функциональные веб-решения. CodeIgniter отличается простотой архитектуры, отличной производительностью и легкостью освоения, благодаря чему многие PHP-разработчики выбирают его для своих проектов.
Основные преимущества и особенности CodeIgniter
- Легковесное ядро: Основная система CodeIgniter предельно минималистична, содержит только необходимые компоненты и обеспечивает быструю загрузку.
- Высокая производительность: Фреймворк оптимизирован для максимальной эффективности и справляется с обработкой большого количества одновременных запросов.
- Простота освоения: Имеет понятную документацию и удобный API, что ускоряет вход для новых пользователей.
- Гибкость: Позволяет интегрировать сторонние библиотеки и расширять функционал под нужды конкретного проекта.
- Активное сообщество: Вокруг CodeIgniter сформировано большое комьюнити, обеспечивающее поддержку и множество полезных ресурсов.
CodeIgniter подходит для разработки как небольших, так и масштабных корпоративных веб-приложений, помогая создавать качественные и быстрые решения.
Настройка среды разработки CodeIgniter с помощью ServBay
ServBay — это инструмент для локальной веб-разработки под macOS и Windows. Он объединяет в себе пакеты PHP, базы данных (MySQL, PostgreSQL, MongoDB), системы кэширования (Redis, Memcached), веб-серверы (Caddy, Nginx, Apache) и удобный интерфейс управления. С ServBay вы легко подготовите и будете контролировать все необходимые компоненты среды для работы CodeIgniter.
В данной инструкции вы узнаете, как создать, настроить и запустить проект CodeIgniter в окружении ServBay, а также как интегрировать базы данных и системы кэширования.
Необходимые условия
Перед началом убедитесь, что выполнены следующие шаги:
- 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
.Переход в корневой каталог сайтов
Откройте терминал и перейдите в рекомендованный каталог:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Создание проекта CodeIgniter
Запустите Composer для создания нового проекта CodeIgniter 4. Назовите каталог проекта
servbay-codeigniter-app
:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composer загрузит каркас приложения CodeIgniter и все зависимости в папку
servbay-codeigniter-app
.Переход в каталог проекта
Перейдите в только что созданный проект:
macOS:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Windows:
cmdcd C:\ServBay\www\servbay-codeigniter-app
1
Первоначальная настройка
Настройка подключения к базе данных
Конфигурация подключения к базе данных находится в файле app/Config/Database.php
. Перед использованием базы данных внесите необходимые параметры в этот файл.
Сначала создайте базу данных с именем servbay_codeigniter_app
через любой из инструментов управления базами (например, Adminer или phpMyAdmin — доступны в интерфейсе ServBay).
Далее откройте app/Config/Database.php
, найдите массив $default
и заполните параметры по типу используемой базы данных (MySQL или PostgreSQL). Стандартные логин и пароль для 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 укажите 'Postgre'
в DBDriver
, порт обычно 5432
, возможно потребуется скорректировать параметры кодировки.
Настройка кэширования (Memcached/Redis)
Если вы планируете использовать Memcached или Redis, откройте файл 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 работает на 127.0.0.1
'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.
- Перейдите на вкладку Сайты (Websites).
- Нажмите на кнопку
+
, чтобы добавить новый сайт. - Заполните параметры:
- Имя (Name): Название сайта, например
My First CodeIgniter Dev Site
. - Домен (Domain): Придумайте домен для локального доступа, например
servbay-codeigniter-test.local
. ServBay сам настроит его для работы на вашей машине. - Тип сайта (Site Type): Выберите
PHP
. - Версия PHP (PHP Version): Укажите используемую версию, например
8.3
. - Корень сайта (Document Root): Важно! Главный файл входа CodeIgniter (
index.php
) находится в папкеpublic
вашего проекта. Укажите путь обязательно до папкиpublic
:/Applications/ServBay/www/servbay-codeigniter-app/public
.
- Имя (Name): Название сайта, например
- Нажмите кнопку Добавить (Add) для сохранения.
- При появлении запроса на применение изменений — подтвердите действие.
Подробнее процесс описан в этом руководстве.
Добавление демонстрационного кода
Для проверки работоспособности проекта и интеграции с базой данных и кэшем измените контроллер по умолчанию 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();
// Сохраняем данные в кэш
$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();
// Сохраняем данные в кэш
$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.';
}
// Извлекаем из кэша
$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
через URL, добавьте соответствующие маршруты в файл 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
Не удаляйте исходные маршруты при добавлении новых.
Доступ к сайту
CodeIgniter-проект теперь работает через ServBay. Откройте браузер и перейдите по настроенному домену:
Главная страница:
https://servbay-codeigniter-test.local
На экране должно появиться сообщениеHello ServBay and CodeIgniter!
, подтверждающее корректную настройку.Проверка 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:
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()
. Обратите внимание: для MySQL и PostgreSQL синтаксис по умолчанию для timestamp отличается (CURRENT_TIMESTAMP
vsNOW()
), а 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Примечание: В данном примере автоматически определяется синтаксис для timestamp в зависимости от платформы. В больших проектах рекомендуется прорабатывать миграции для разных типов СУБД отдельно.
Запустите миграцию: Выполните команду для применения миграции и создания таблицы:
bashphp spark migrate
1В случае успеха вы увидите сообщение о завершении миграции в терминале. Проверьте наличие таблицы
users
в базе через Adminer или другой инструмент.
Тестирование методов работы с базой
Убедитесь, что параметры подключения к базе (в app/Config/Database.php
) заполнены корректно, и таблица users
создана.
Добавить пользователя:
https://servbay-codeigniter-test.local/add-user
Каждый переход по этому URL добавляет новый пользовательский рекорд. Ожидаемый результат — сообщение видаUser added successfully: user_XXXXXXXXXX@servbay.demo
.Получить список пользователей:
https://servbay-codeigniter-test.local/list-users
Этот маршрут возвращает список данных в формате JSON. Вы увидите массив объектов пользователей.
Вывод
Выполнив шаги данного руководства, вы подготовили и развернули проект CodeIgniter на macOS с помощью ServBay. Вы научились создавать проект через Composer, настраивать сайт в ServBay с корректным указанием директории, конфигурировать подключения к базе данных и кэшированию, а также использовать примеры кода для проверки корректной работы интеграций. ServBay облегчает создание и управление локальной средой, позволяя полностью сосредоточиться на разработке вашего приложения CodeIgniter.