Создание и запуск проекта CodeIgniter
Что такое CodeIgniter?
CodeIgniter — это легковесный и высокопроизводительный фреймворк для разработки веб-приложений на PHP. Он основан на шаблоне проектирования Model-View-Controller (MVC) и предназначен для быстрого создания функциональных веб-приложений. Благодаря лаконичной структуре, отличной производительности и легкости в освоении, CodeIgniter стал одним из самых популярных выборов среди PHP‑разработчиков.
Основные особенности и преимущества CodeIgniter
- Легковесное ядро: Ядро CodeIgniter очень компактное и содержит только необходимые базовые компоненты, что обеспечивает молниеносную загрузку.
- Отличная производительность: Фреймворк спроектирован с акцентом на эффективность и способен обрабатывать большую нагрузку, обеспечивая высокую производительность приложений.
- Простота освоения: Подробная документация и интуитивно понятный API позволяют быстро начать работу и сократить время на обучение.
- Гибкость: Разработчик может свободно выбирать и интегрировать сторонние библиотеки в проект, легко расширяя и настраивая функционал под свои задачи.
- Активное сообщество: Широкое и активное комьюнити обеспечивает доступ к массам ресурсов и быструю поддержку.
CodeIgniter одинаково подходит как для маленьких сайтов, так и для крупных корпоративных решений, помогая создавать качественные web‑решения эффективно и быстро.
Развертывание среды для CodeIgniter с помощью ServBay
ServBay — это инструмент локальной веб-разработки для macOS, который объединяет в себе PHP, базы данных (MySQL, PostgreSQL, MongoDB), кеш (Redis, Memcached), веб-серверы (Caddy, Nginx, Apache) и удобную панель управления. С его помощью вы легко настраиваете и управляете средой, необходимой для работы CodeIgniter.
В этом руководстве вы узнаете, как создать, настроить и запустить проект CodeIgniter в окружении ServBay, а также как подключить различные базы данных и кеширующие сервисы.
Предварительные требования
Перед началом убедитесь, что выполнены следующие условия:
- На вашем Mac установлен и запущен ServBay.
- В ServBay активирована нужная версия PHP (например, PHP 8.3).
- В ServBay активированы нужные базы данных и кеширующие пакеты (например, MySQL, PostgreSQL, Redis, Memcached).
Создание проекта CodeIgniter
ServBay рекомендует размещать проекты сайтов в каталоге /Applications/ServBay/www
— это облегчает управление сайтами в локальной среде.
Установка 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
.Переход в каталог проекта
Перейдите в созданный каталог с проектом:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1
Первоначальная настройка
Настройка подключения к БД
Конфигурация подключения к базе данных находится в файле app/Config/Database.php
. Перед использованием базы данных укажите параметры для соединения.
Сначала создайте базу данных с помощью инструмента управления, например, Adminer или phpMyAdmin (доступны через интерфейс ServBay). Назовите её servbay_codeigniter_app
.
Далее отредактируйте файл app/Config/Database.php
, найдите массив $default
и введите данные для вашей СУБД (например, MySQL или PostgreSQL), которая активирована в ServBay. Как правило, имя пользователя и пароль по умолчанию — root
и password
.
Пример конфигурации для MySQL:
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
];
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
.
Откройте app/Config/Cache.php
и отредактируйте нужные секции. В ServBay Memcached слушает порт 11211
, Redis — порт 6379
, обычно без пароля.
Пример конфигурации Memcached:
public $memcached = [
'host' => '127.0.0.1', // Memcached обычно слушает на 127.0.0.1
'port' => 11211, // Порт по умолчанию для Memcached
'weight' => 1,
];
2
3
4
5
Пример для Redis:
public string $handler = 'redis'; // Указываем обработчик кеша redis
public $default = [ // Конфиги Redis обычно в массиве default
'host' => '127.0.0.1', // Redis слушает на 127.0.0.1
'password' => null, // По умолчанию пароля нет
'port' => 6379, // Порт по умолчанию для Redis
'timeout' => 0,
'database' => 0,
];
2
3
4
5
6
7
8
9
Проверьте, что для каждого активного пакетa кеша настроены соответствующие параметры.
Настройка веб‑сервера (Управление сайтами ServBay)
С помощью функции Сайты в ServBay настройте веб-сервер так, чтобы он указывал на ваш проект 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
. Поэтому укажите корневую директорию как:/Applications/ServBay/www/servbay-codeigniter-app/public
.
- Имя (Name): Любое понятное имя, например,
- Нажмите Добавить (Add) для сохранения.
- При необходимости подтвердите применение изменений.
Подробности смотрите в Добавление первого сайта.
Добавление примерного кода
Для проверки работы проекта и тестирования подключения к базам данных и кешу, изменим стандартный контроллер CodeIgniter Home
, добавив в него тестовые методы.
Откройте файл app/Controllers/Home.php
и замените содержимое на:
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Подключаем обработку ошибок БД
use CodeIgniter\Cache\Exceptions\CacheException; // Подключаем обработку ошибок кеша
class Home extends Controller
{
/**
* Главная страница (welcome)
*/
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();
}
}
}
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, добавьте соответствующие правила в роутинг CodeIgniter.
Откройте app/Config/Routes.php
и найдите определение $routes
. Дополните его следующими строками:
// ... другие маршруты ...
// Пример для Memcached
$routes->get('/memcached', 'Home::memcached');
// Пример для Redis
$routes->get('/redis', 'Home::redis');
// Примеры для базы данных
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... другие маршруты ...
2
3
4
5
6
7
8
9
10
11
12
13
Добавьте новые маршруты, не удаляя существующих!
Открытие сайта
Ваш проект 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:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Создайте файл миграции: С помощью встроенного CLI инструмента CodeIgniter сгенерируйте файл миграции для таблицы
users
:bashphp spark make:migration create_users_table
1Новая миграция появится в
app/Database/Migrations
.Отредактируйте миграцию: Откройте свежесозданный файл (например,
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
) и определите структуру таблицы в методеup()
. Обратите внимание: в MySQL и PostgreSQL синтаксис дефолтных значений для временных полей различается (CURRENT_TIMESTAMP
противNOW()
). Для кросс-платформенного решения используйте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Примечание: Пример использует простую динамическую логику выбора выражения для поля времени в зависимости от типа СУБД. В реальных проектах возможно потребуется более сложная стратегия миграций или отдельные миграции для каждой СУБД.
Запуск миграции: В терминале выполните команду для запуска миграции, чтобы создать таблицу
users
:bashphp spark migrate
1При успехе увидите сообщение о выполнении миграции. Также можно проверить в Adminer (через ServBay), что таблица появилась в базе.
Использование примеров для работы с базой
Убедитесь, что вы корректно настроили соединение с БД в app/Config/Database.php
и что миграция уже выполнена.
Добавить пользователя в БД: Откройте
https://servbay-codeigniter-test.local/add-user
Каждый вызов адреса добавляет новую запись в таблицуusers
. Должно появиться сообщение вродеUser added successfully: [email protected]
.Получить список пользователей: Откройте
https://servbay-codeigniter-test.local/list-users
По этому адресу будут получены все записи пользователей в формате JSON.
Итоги
Следуя шагам из инструкции, вы создали, настроили и запустили проект CodeIgniter на macOS в окружении ServBay. Вы узнали, как создавать проект через Composer, настраивать функцию Сайты для правильной работы веб-сервера, указывать конфиги БД и кеша в CodeIgniter, а также тестировать интеграцию с помощью примеров кода. ServBay максимально упрощает создание и поддержку локальных сред, позволяя сфокусироваться на разработке вашего приложения на CodeIgniter.