CodeIgniter Projesi Oluşturma ve Çalıştırma
CodeIgniter Nedir?
CodeIgniter, hafif ve yüksek performanslı bir PHP web uygulama geliştirme çerçevesidir. Model-View-Controller (MVC) tasarım modelini benimser ve geliştiricilerin zengin özellikli web uygulamalarını hızla inşa etmesine yardımcı olur. Sade yapısı, mükemmel performansı ve kolay öğrenilebilirliği sayesinde birçok PHP geliştiricisi için ilk tercih olmuştur.
CodeIgniter'ın Temel Özellikleri ve Avantajları
- Hafif Çekirdek: CodeIgniter'ın çekirdek sistemi son derece kompakt olup, yalnızca gerekli bileşenleri içerir ve çok hızlı yüklenir.
- Üstün Performans: Verimli yapı sayesinde yüksek eşzamanlılıkta bile mükemmel uygulama performansı sağlar.
- Kolay Öğrenim: Açık belgeleri ve sezgisel API'si sayesinde geliştiriciler için öğrenme eğrisi düşüktür.
- Yüksek Esneklik: Projenizin gereksinimlerine göre üçüncü parti kütüphaneleri özgürce seçip entegre edebilirsiniz.
- Aktif Topluluk Desteği: Büyük ve canlı geliştirici topluluğu ile zengin kaynak ve destek sunar.
CodeIgniter, küçük projelerden büyük kurumsal uygulamalara kadar her ölçekten geliştirme ihtiyacına uygundur ve geliştiricilere hızlı, kaliteli web çözümleri sunar.
ServBay ile CodeIgniter Geliştirme Ortamı Kurulumu
ServBay, macOS ve Windows için PHP, veritabanı (MySQL, PostgreSQL, MongoDB), önbellek (Redis, Memcached), web sunucusu (Caddy, Nginx, Apache) gibi çeşitli paketleri bir arada sunan yerel bir web geliştirme ortamı aracıdır. Kolay yönetim arayüzüyle CodeIgniter'ın ihtiyaç duyduğu geliştirme ortamını hızlıca kurmayı mümkün kılar.
Bu rehberde, ServBay’in PHP ortamı ve Web Sitesi özelliğiyle bir CodeIgniter projesi oluşturma, yapılandırma ve çalıştırma işlemlerini ve çoklu veritabanı ve önbellek servisleri entegrasyonunu adım adım bulabilirsiniz.
Ön Gereksinimler
Başlamadan önce aşağıdakilerin hazır olduğundan emin olun:
- ServBay’i macOS veya Windows sisteminizde başarıyla kurup çalıştırdınız.
- ServBay’de kullanmak istediğiniz PHP sürümünü etkinleştirdiniz (örneğin PHP 8.3).
- ServBay’de kullanacağınız veritabanı ve önbellek paketlerini (ör. MySQL, PostgreSQL, Redis, Memcached) etkinleştirdiniz.
CodeIgniter Projesi Oluşturma
ServBay, web sitelerinizi ortak bir klasörde tutmanızı önerir; bu hem ServBay’in sitelerinizi kolayca yönetmesini sağlar hem de düzeni korur:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Composer Kurulumu
ServBay Composer’ı dahili olarak içerir; ekstra kurulum gerektirmez. Terminalde doğrudan
composer
komutunu kullanabilirsiniz.Site Kök Dizini’ne Girin
Terminali açın ve ServBay’in önerdiği kök dizine gidin:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1CodeIgniter Projesi Oluşturun
Composer ile yeni bir CodeIgniter 4 projesi oluşturun. Klasörümüzün adı
servbay-codeigniter-app
olsun:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composer, CodeIgniter uygulamasının iskeletini ve bağımlılıklarını
servbay-codeigniter-app
klasörüne indirecektir.Proje Dizini’ne Girin
Yeni oluşturulan CodeIgniter projesinin dizinine girin:
macOS:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Windows:
cmdcd C:\ServBay\www\servbay-codeigniter-app
1
Başlangıç Yapılandırması
Veritabanı Bağlantısını Yapılandırma
CodeIgniter’ın veritabanı ayarları app/Config/Database.php
dosyasında bulunur. Veritabanı kullanmadan önce bu dosyada bağlantı bilgilerini düzenleyin.
Öncelikle, bir veritabanı kullanacaksanız, ServBay’in veritabanı yönetim araçları (Adminer ya da phpMyAdmin; giriş ServBay arayüzünde) ile servbay_codeigniter_app
adında bir veritabanı yaratmış olmanız gerekir.
Ardından, app/Config/Database.php
dosyasını açın, $default
dizisini bulun ve ServBay’de etkinleştirdiğiniz veritabanı türüne (örn. MySQL veya PostgreSQL) uygun bilgileri girin. ServBay için varsayılan kullanıcı adı ve şifre genellikle root
ve password
’dur.
İşte bir MySQL yapılandırma örneği:
php
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // ServBay veritabanı genellikle 127.0.0.1'de çalışır
'username' => 'root', // ServBay varsayılan kullanıcı adı
'password' => 'password', // ServBay varsayılan şifre
'database' => 'servbay_codeigniter_app', // Oluşturduğunuz veritabanı adı
'DBDriver' => 'MySQLi', // Veritabanı türüne göre: MySQL için MySQLi veya Pdo
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306, // MySQL varsayılan portu
];
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 kullanıyorsanız, DBDriver
’ı 'Postgre'
yapın, port
genellikle 5432
olmalı ve karakter seti ile ilgili ayarları gözden geçirin.
Önbellek Bağlantısını Yapılandırma (Memcached/Redis)
Memcached veya Redis kullanacaksanız, app/Config/Cache.php
dosyasında ilgili ayarları düzenleyin.
app/Config/Cache.php
dosyasını açıp ilgili bölümü bulmalısınız. ServBay için Memcached varsayılan portu 11211
, Redis ise 6379
’dur ve genellikle şifre gerektirmez.
Bir Memcached yapılandırma örneği:
php
public $memcached = [
'host' => '127.0.0.1', // ServBay Memcached genellikle 127.0.0.1'de çalışır
'port' => 11211, // Memcached varsayılan portu
'weight' => 1,
];
1
2
3
4
5
2
3
4
5
Bir Redis yapılandırma örneği:
php
public string $handler = 'redis'; // Varsayılan önbellek işleyicisini redis olarak ayarla
public $default = [ // Redis ayarları genellikle default dizide
'host' => '127.0.0.1', // ServBay Redis genellikle 127.0.0.1'de çalışır
'password' => null, // ServBay Redis için varsayılan olarak şifre yoktur
'port' => 6379, // Redis varsayılan portu
'timeout' => 0,
'database' => 0,
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Kullandığınız önbellek paketine göre uygun bölümü ayarlamayı unutmayın.
Web Sunucusu Yapılandırma (ServBay Web Sitesi Ayarı)
ServBay’in Web Sitesi özelliği ile web sunucusunu CodeIgniter projesine yönlendirebilirsiniz.
- ServBay uygulama arayüzünü açın.
- Web Sitesi (Websites) sekmesine gidin.
- Sol altta bulunan
+
butonuna tıklayarak yeni bir site ekleyin. - Site bilgilerini girin:
- İsim (Name): Kolay tanıyacağınız bir isim girin, örneğin
İlk CodeIgniter Geliştirme Sitem
. - Alan adı (Domain): Yerel tarayıcıda kullanmak için bir alan adı girin, ör.
servbay-codeigniter-test.local
. ServBay.local
uzantılı alan adlarını otomatik olarak yerelde çözer. - Site Türü (Site Type):
PHP
seçin. - PHP Sürümü (PHP Version): Kullandığınız PHP sürümünü seçin, ör.
8.3
. - Site Kök Dizini (Document Root): Önemli bir adım! CodeIgniter giriş dosyası (
index.php
), projeninpublic
klasöründe bulunur. Bu yüzden Site kök dizini kesinlikle projeninpublic
klasörü olmalı:/Applications/ServBay/www/servbay-codeigniter-app/public
- İsim (Name): Kolay tanıyacağınız bir isim girin, örneğin
- Ekle (Add) butonuna tıklayarak ayarları kaydedin.
- ServBay ayarları uygulamanız için bir onay isteyebilir, onaylayın.
Ayrıntılı adımlar için İlk Web Sitesi Ekleme rehberine bakabilirsiniz.
Örnek Kod Ekleme
Projenin doğru çalıştığını ve veritabanı & önbellek bağlantılarını test etmek için CodeIgniter’ın varsayılan Home
kontrolörünü örnek metotlarla güncelleyelim.
app/Controllers/Home.php
dosyasını açın ve içeriğini aşağıdaki kodla değiştirin:
php
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Veritabanı hata sınıfını ekle
use CodeIgniter\Cache\Exceptions\CacheException; // Önbellek hata sınıfını ekle
class Home extends Controller
{
/**
* Varsayılan ana sayfa metodu
*/
public function index(): string
{
// Basit bir karşılama mesajı döndürür
return '<h1>Hello ServBay and CodeIgniter!</h1><p>Your CodeIgniter project is running on ServBay.</p>';
}
/**
* Memcached örnek metodu
*/
public function memcached(): string
{
try {
$cache = \Config\Services::cache();
// Önbelleğe veri yazma işlemi
$success = $cache->save('servbay_memcached_key', 'Hello Memcached from CodeIgniter!', 60); // 60 saniye önbellek
if (!$success) {
return 'Error: Failed to save data to Memcached. Check Memcached service and configuration.';
}
// Önbellekten veri okuma işlemi
$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) {
// Önbellekle ilgili hata yakalama
return 'Cache Error: ' . $e->getMessage() . '. Ensure Memcached service is running and configured correctly.';
} catch (\Exception $e) {
// Diğer olası hataları yakala
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Redis örnek metodu
*/
public function redis(): string
{
try {
$cache = \Config\Services::cache();
// Önbelleğe veri yazma işlemi
$success = $cache->save('servbay_redis_key', 'Hello Redis from CodeIgniter!', 60); // 60 saniye önbellek
if (!$success) {
return 'Error: Failed to save data to Redis. Check Redis service and configuration.';
}
// Önbellekten veri okuma işlemi
$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) {
// Önbellek ile ilgili hata yakalama
return 'Cache Error: ' . $e->getMessage() . '. Ensure Redis service is running and configured correctly.';
} catch (\Exception $e) {
// Diğer olası hataları yakala
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Kullanıcı verisi veritabanına ekle (MySQL/PostgreSQL)
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// 'users' tablosunun varlığını kontrol et (basit önlem)
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Veri ekle
$data = [
'name' => 'ServBay Demo User',
'email' => 'user_' . time() . '@servbay.demo', // Ayrı email için time()
];
$db->table('users')->insert($data);
// Ekleme işleminin başarılı olup olmadığını kontrol et (isteğe bağlı, insert() genellikle true döner)
// if ($db->affectedRows() > 0) {
return 'User added successfully: ' . $data['email'];
// } else {
// return 'Error: Failed to add user.';
// }
} catch (DatabaseException $e) {
// Veritabanı ile ilgili hatayı yakala
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Diğer olası hataları yakala
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Veritabanından kullanıcı verisi oku (MySQL/PostgreSQL)
*/
public function listUsers(): string
{
try {
$db = \Config\Database::connect();
// 'users' tablosunun varlığını kontrol et
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Tüm kullanıcıları sorgula
$users = $db->table('users')->get()->getResult();
if (empty($users)) {
return 'No users found in the database.';
}
// Kullanıcıları JSON formatında döndür
return json_encode($users);
} catch (DatabaseException $e) {
// Veritabanı ile ilgili hatayı yakala
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Diğer olası hataları yakala
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
Bu güncellenmiş kontrolör, daha anlaşılır çıktılar ve temel hata yönetimi içerir; sorunları tanılamanızda size yardımcı olur.
Rota Tanımları
Home
kontrolörüne eklediğimiz örnek metodlara URL üzerinden erişebilmek için CodeIgniter’ın rota dosyasında ilgili kuralları eklememiz gerekir.
app/Config/Routes.php
dosyasını açın. $routes
tanımını bulun ve aşağıdaki rota kurallarını ekleyin:
php
// ... Diğer rota kuralları ...
// Memcached örnek rotası
$routes->get('/memcached', 'Home::memcached');
// Redis örnek rotası
$routes->get('/redis', 'Home::redis');
// Veritabanı örnek rotası
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... Diğer rota kuralları ...
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
Yeni rotaları mevcut $routes
tanımının içine ekleyin, önceki kuralları silmeyin.
Siteye Erişim
Artık CodeIgniter projeniz ServBay üzerinde çalışır durumda. Tarayıcınızdan, önceki adımda belirlediğiniz alan adıyla projenizi ziyaret edin:
Ana Sayfa:
https://servbay-codeigniter-test.local
Eğer her şey yolundaysa, sayfadaHello ServBay and CodeIgniter!
yazısını görmelisiniz; projeniz ServBay’in web sunucusunda sorunsuz çalışıyor demektir.Memcached Testi:
https://servbay-codeigniter-test.local/memcached
Memcached servisi ve yapılandırmanız doğruysa,Memcached Test Success: Hello Memcached from CodeIgniter!
gibi bir çıktı görmelisiniz.Redis Testi:
https://servbay-codeigniter-test.local/redis
Redis servisi ve yapılandırmanız doğruysa,Redis Test Success: Hello Redis from CodeIgniter!
gibi bir çıktı görmelisiniz.
Veritabanı İşlemleri Örneği (MySQL/PostgreSQL)
Veritabanı örneklerini kullanabilmek için önce CodeIgniter'ın migration komutu ile users
tablosunu oluşturmalısınız.
Veritabanı Yapısını Oluşturma (Migration Çalıştırma)
Terminali açın ve CodeIgniter proje dizinine girin:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Migration Dosyası Oluşturun: CodeIgniter'ın CLI aracıyla kullanıcı tablosunu tanımlayacak bir migration dosyası oluşturun:
bashphp spark make:migration create_users_table
1app/Database/Migrations
dizininde yeni bir PHP dosyası oluşacak.Migration Dosyasını Düzenleyin: Oluşan yeni dosyayı (dosya adı genellikle
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
) açın,up()
metodundausers
tablosunun sütunlarını ve indekslerini tanımlayın. MySQL ile PostgreSQL arasında zaman damgası alanlarının varsayılan değer sözdizimi farklıdır (CURRENT_TIMESTAMP
vsNOW()
); CodeIgniter’dakiRawSql
bu konuda yardımcı olur. Örnek:php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // RawSql sınıfını eklediğinizden emin olun 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 alanı benzersiz ], 'created_at' => [ 'type' => 'TIMESTAMP', // Veritabanına göre uygun varsayılan değer ifadesini seçin // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP' : 'NOW()'), // Dinamik seçim ], '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()'), // Dinamik seçim ], ]); $this->forge->addKey('id', true); // id sütununu anahtar yap $this->forge->createTable('users'); // users tablosunu oluştur } public function down() { // Migration geri alındığında users tablosunu sil $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
51Not: Bu örnekte, veritabanı platformuna bağlı olarak zaman damgası varsayılan değer sözdizimi dinamik ayarlanır. Gerçek projede, daha sağlam migration stratejileri kullanmak veya farklı veritabanları için ayrı migration dosyaları hazırlamak gerekebilir.
Migrasyonu Çalıştırın: Terminalde şu komutu girerek users tablosunu oluşturun:
bashphp spark migrate
1Başarılıysa terminalde migration işleminin bittiğine dair bir bildirim görürsünüz. Ayrıca ServBay’in veritabanı yönetim aracı (örn. Adminer) ile
servbay_codeigniter_app
veritabanındausers
tablosunun oluştuğundan emin olabilirsiniz.
Veritabanı Örneğine Erişim
app/Config/Database.php
dosyasında veritabanı bağlantı ayarını doğru yaptıysanız ve migrasyonu çalıştırıp users
tablosunu oluşturduysanız:
Veritabanına kullanıcı ekleme:
https://servbay-codeigniter-test.local/add-user
adresine gidin. Her ziyaretinizdeusers
tablosuna yeni bir kullanıcı kaydı eklenir.User added successfully: user_XXXXXXXXXX@servbay.demo
gibi bir mesaj görmelisiniz.Veritabanındaki kullanıcıları listeleme:
https://servbay-codeigniter-test.local/list-users
adresine gidin. Bu URL, users tablosundaki tüm kayıtları sorgular ve JSON formatında döndürür. Bir JSON dizisi şeklinde kullanıcı verilerini görmelisiniz.
Sonuç
Bu adımlarla, ServBay’in macOS ortamında bir CodeIgniter projesi kurup yapılandırdınız ve çalıştırdınız. Composer ile hızlı proje oluşturmayı, ServBay’in Web Sitesi özelliğini kullanarak doğru dizine yönlendirmeyi, CodeIgniter’ın veritabanı ve önbellek yapılandırmasını yapmayı ve örnek kodlar ile entegrasyonu doğrulamayı öğrendiniz. ServBay, yerel geliştirme ortamınızın kurulumunu ve yönetimini sadeleştirir; size ise uygulama geliştirmeye odaklanmak kalır.