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 desenini takip eder ve geliştiricilere zengin özelliklere sahip web uygulamalarını hızla inşa etme kolaylığı sağlar. CodeIgniter, yalın yapısı, üstün performansı ve kolay öğrenilebilirliği ile birçok PHP geliştiricisinin ilk tercihi olmuştur.
CodeIgniter'ın Temel Özellikleri ve Avantajları
- Hafif Çekirdek: CodeIgniter'ın çekirdek sistemi çok sade olup, yalnızca temel bileşenleri içerir ve çok hızlı yüklenir.
- Üstün Performans: Çerçeve, yüksek verimlilik için tasarlanmış olup, yoğun eşzamanlı istekleri karşılayabilir ve mükemmel uygulama performansı sunar.
- Kolay Öğrenme: Açık belgeler ve sezgisel API ile yeni başlayanların kolayca öğrenmesini sağlar ve geliştiriciler uygulamaya hızlıca hakim olabilir.
- Yüksek Esneklik: Proje gereksinimlerine göre üçüncü parti kütüphaneler serbestçe entegre edilebilir, fonksiyonellik kolayca genişletilip özelleştirilebilir.
- Aktif Topluluk Desteği: Büyük ve canlı bir geliştirici topluluğu sayesinde bol miktarda kaynak ve destek sunar.
CodeIgniter, küçük projelerden büyük ölçekli kurumsal uygulamalara kadar her türlü geliştirme ihtiyacında kullanılabilir ve geliştiricilerin yüksek kaliteli web çözümlerini verimli şekilde inşa etmelerine yardımcı olur.
ServBay ile CodeIgniter Geliştirme Ortamı Kurulumu
ServBay, macOS için tasarlanmış bir yerel Web geliştirme ortamı aracıdır. PHP, veritabanları (MySQL, PostgreSQL, MongoDB), önbellek (Redis, Memcached), web sunucuları (Caddy, Nginx, Apache) gibi birçok yazılımı bütünleşik olarak sunar ve kullanıcı dostu bir yönetim arayüzü sağlar. ServBay ile CodeIgniter'ın ihtiyaç duyduğu geliştirme ortamını kolayca kurup yönetebilirsiniz.
Bu dökümanda, ServBay’deki PHP ortamı ile web sitesi fonksiyonunu kullanarak bir CodeIgniter projesi oluşturmanın, konfigüre etmenin ve çalıştırmanın yolunu; farklı veritabanı ve önbellek servisleriyle nasıl entegre olacağınızı adım adım gösteriyoruz.
Ön Koşullar
Başlamadan önce aşağıdaki gereksinimleri karşıladığınızdan emin olun:
- macOS sistemine ServBay’i başarılı şekilde kurdunuz ve çalıştırıyorsunuz.
- Kullanmak istediğiniz PHP sürümünü (örneğin PHP 8.3) ServBay’de etkinleştirdiniz.
- Kullanmak istediğiniz veritabanı ve önbellek yazılım paketlerini (örn. MySQL, PostgreSQL, Redis, Memcached) ServBay’de etkinleştirdiniz.
CodeIgniter Projesi Oluşturma
ServBay, web sitesi projelerinizi /Applications/ServBay/www
klasöründe toplu olarak saklamanızı tavsiye eder; bu, ServBay’in yerel siteleri daha iyi yönetmesini sağlar.
Composer Kurulumu
ServBay kurulumunun bir parçası olarak Composer zaten önceden entegre edilmiştir, bu nedenle genellikle ek bir kurulum gerekmez. Terminalde doğrudan
composer
komutunu kullanabilirsiniz.Site Kök Dizini’ne Girin
Terminali açın ve ServBay’in önerdiği kök dizine geçin:
bashcd /Applications/ServBay/www
1CodeIgniter Projesi Oluşturun
Composer kullanarak yeni bir CodeIgniter 4 projesi oluşturun. Proje klasörünü
servbay-codeigniter-app
olarak adlandıralım:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composer, CodeIgniter’ın iskelet uygulamasını ve bağımlılıklarını
servbay-codeigniter-app
klasörüne indirecektir.Proje Dizinine Girin
Oluşturduğunuz CodeIgniter proje klasörüne geçin:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1
İlk Yapılandırmalar
Veritabanı Bağlantısını Ayarlama
CodeIgniter'da veritabanı ayarları app/Config/Database.php
dosyasında yapılır. Veri tabanını kullanmadan önce bağlantı bilgilerini burada tanımlamanız gerekmektedir.
Öncelikle, bir veritabanı kullanmayı planlıyorsanız, ServBay arayüzünden erişilebilen veritabanı yönetim aracı (Adminer veya phpMyAdmin gibi) ile servbay_codeigniter_app
isminde bir veritabanı oluşturduğunuzdan emin olun.
Sonrasında, app/Config/Database.php
dosyasında $default
dizisini bulun ve ServBay’de etkinleştirdiğiniz veritabanı türüne (örneğin MySQL veya PostgreSQL) uygun şekilde bağlantı bilgilerini doldurun. Genellikle varsayılan ServBay veritabanı kullanıcı adı ve şifresi root
ve password
’dür.
Aşağıda bir MySQL yapılandırma örneği bulabilirsiniz:
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // ServBay veritabanı genellikle 127.0.0.1'den dinlenir
'username' => 'root', // ServBay varsayılan kullanıcı adı
'password' => 'password', // ServBay varsayılan şifresi
'database' => 'servbay_codeigniter_app', // Oluşturduğunuz veritabanı ismi
'DBDriver' => 'MySQLi', // Veritabanı türüne göre, MySQL için MySQLi veya Pdo kullanılır
'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
];
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Eğer PostgreSQL kullanacaksanız DBDriver
'ı 'Postgre'
olarak ayarlayın, port
genellikle 5432
olur ve karakter setiyle ilgili ayarlar değişiklik gösterebilir.
Önbellek Bağlantı Ayarları (Memcached/Redis)
Eğer Memcached veya Redis kullanmak istiyorsanız, app/Config/Cache.php
dosyasını yapılandırmalısınız.
app/Config/Cache.php
dosyasını açıp ilgili bölümleri ayarlayın. ServBay'de Memcached varsayılan olarak 11211
, Redis ise 6379
portununda ve genellikle şifresiz çalışır.
Aşağıda bir Memcached yapılandırma örneği:
public $memcached = [
'host' => '127.0.0.1', // ServBay Memcached genellikle 127.0.0.1'den dinlenir
'port' => 11211, // Memcached varsayılan portu
'weight' => 1,
];
2
3
4
5
Bir Redis yapılandırması örneği:
public string $handler = 'redis'; // Varsayılan önbellek yöneticisini redis olarak ayarlayın
public $default = [ // Redis ayarları genellikle default dizisinde yer alır
'host' => '127.0.0.1', // ServBay Redis genellikle 127.0.0.1'den dinlenir
'password' => null, // ServBay Redis şifresizdir
'port' => 6379, // Redis varsayılan portu
'timeout' => 0,
'database' => 0,
];
2
3
4
5
6
7
8
9
Kullandığınız önbellek yazılım paketine göre ilgili bölümleri doğru şekilde ayarladığınızdan emin olun.
Web Sunucusu Yapılandırması (ServBay Sitesi Ayarları)
ServBay’in web sitesi fonksiyonu aracılığıyla web sunucusunu CodeIgniter projenize yönlendirin.
- ServBay uygulama arayüzünü açın.
- Web Siteleri (Websites) sekmesine gidin.
- Sol alt köşedeki
+
butonuyla yeni bir site ekleyin. - Site bilgilerini eksiksiz doldurun:
- İsim (Name): Kolayca ayırt edebileceğiniz bir ad yazın, örneğin
My First CodeIgniter Dev Site
. - Alan Adı (Domain): Yerel tarayıcınızda ziyaret edeceğiniz alan adını belirleyin, ör.
servbay-codeigniter-test.local
. ServBay.local
uzantılı etki alanını otomatik olarak yerel olarak çözer. - Site Türü (Site Type):
PHP
seçin. - PHP Sürümü (PHP Version): Kullanmak istediğiniz PHP sürümünü seçin, ör.
8.3
. - Site Kök Dizini (Document Root): Önemli bir adım! CodeIgniter’ın giriş dosyası (
index.php
) proje kökündekipublic
klasöründedir. Bu nedenle site kök dizininiz proje dizininin içindekipublic
klasörü olmalı:/Applications/ServBay/www/servbay-codeigniter-app/public
.
- İsim (Name): Kolayca ayırt edebileceğiniz bir ad yazın, örneğin
- Ekle (Add) butonuna basarak ayarları kaydedin.
- ServBay değişiklikleri uygulamak isteyip istemediğinizi sorabilir, onaylayın.
Ayrıntılı adımlar için İlk Web Sitesinin Eklenmesi rehberine bakabilirsiniz.
Örnek Kod Ekleme
Projenizin başarılı şekilde çalıştığını ve veritabanı/önbellek entegrasyonunu test etmek için, CodeIgniter’ın varsayılan Home
denetleyicisini örnek metodlarla güncelleyelim.
app/Controllers/Home.php
dosyasını açarak içeriğini aşağıdaki kodla değiştirin:
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Veritabanı hata sınıfını dahil et
use CodeIgniter\Cache\Exceptions\CacheException; // Önbellek hata sınıfını dahil et
class Home extends Controller
{
/**
* Varsayılan anasayfa metodu
*/
public function index(): string
{
// Basit bir hoş geldiniz mesajı döndür
return '<h1>Hello ServBay and CodeIgniter!</h1><p>Your CodeIgniter project is running on ServBay.</p>';
}
/**
* Memcached örneği metodu
*/
public function memcached(): string
{
try {
$cache = \Config\Services::cache();
// Önbelleğe veri kaydetmeye çalış
$success = $cache->save('servbay_memcached_key', 'Hello Memcached from CodeIgniter!', 60); // 60 saniye önbelleklensin
if (!$success) {
return 'Error: Failed to save data to Memcached. Check Memcached service and configuration.';
}
// Önbellekten veri oku
$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) {
// Önbellek ile ilgili istisnaları yakala
return 'Cache Error: ' . $e->getMessage() . '. Ensure Memcached service is running and configured correctly.';
} catch (\Exception $e) {
// Diğer istisnaları yakala
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Redis örneği metodu
*/
public function redis(): string
{
try {
$cache = \Config\Services::cache();
// Önbelleğe veri kaydetmeye çalış
$success = $cache->save('servbay_redis_key', 'Hello Redis from CodeIgniter!', 60); // 60 saniye önbelleklensin
if (!$success) {
return 'Error: Failed to save data to Redis. Check Redis service and configuration.';
}
// Önbellekten veri oku
$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 istisnaları yakala
return 'Cache Error: ' . $e->getMessage() . '. Ensure Redis service is running and configured correctly.';
} catch (\Exception $e) {
// Diğer istisnaları yakala
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Kullanıcıyı veritabanına yaz (MySQL/PostgreSQL)
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// 'users' tablosu var mı diye kontrol et (basit önlem)
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Yeni veri ekle
$data = [
'name' => 'ServBay Demo User',
'email' => 'user_' . time() . '@servbay.demo', // Tekil email oluşturmak için time() kullanıldı
];
$db->table('users')->insert($data);
// Eklemenin başarılı olup olmadığını kontrol etmek isteğe bağlıdır (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 istisnaları yakala
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Diğer istisnaları yakala
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Veritabanından kullanıcıları listele (MySQL/PostgreSQL)
*/
public function listUsers(): string
{
try {
$db = \Config\Database::connect();
// 'users' tablosu var mı diye 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ı listesini JSON formatında döndür
return json_encode($users);
} catch (DatabaseException $e) {
// Veritabanı ile ilgili istisnaları yakala
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Diğer istisnaları yakala
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
Bu güncellenmiş denetleyici daha anlaşılır çıktı ve hata ayıklama mesajları içerir; olası sorunları teşhis etmenize yardımcı olur.
Rotaları Yapılandırın
Home
denetleyicisine az önce eklediğiniz örnek metotlara URL üzerinden erişmek için CodeIgniter’ın routing dosyasında gereken kuralları tanımlayın.
app/Config/Routes.php
dosyasını açın. $routes
tanımının olduğu bölüme aşağıdaki kuralları ekleyin:
// ... Diğer route kuralları ...
// Memcached örnek route'u
$routes->get('/memcached', 'Home::memcached');
// Redis örnek route'u
$routes->get('/redis', 'Home::redis');
// Veritabanı örnek route'ları
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... Diğer route kuralları ...
2
3
4
5
6
7
8
9
10
11
12
13
Bu yeni rotaları mevcut $routes
tanımına eklediğinizden, önceki ayarların üzerine yazmadığınızdan emin olun.
Web Sitesini Ziyaret Edin
Artık CodeIgniter projeniz ServBay üzerinde yapılandırıldı ve çalışıyor. Tarayıcınızı açıp daha önce ayarladığınız alan adı ile siteyi ziyaret edin:
Anasayfa:
https://servbay-codeigniter-test.local
Web sunucunuzun doğru çalıştığını gösterenHello ServBay and CodeIgniter!
cümlesini görmelisiniz.Memcached örneği:
https://servbay-codeigniter-test.local/memcached
Memcached servisi ve ayarları düzgünse,Memcached Test Success: Hello Memcached from CodeIgniter!
gibi bir mesaj göreceksiniz.Redis örneği:
https://servbay-codeigniter-test.local/redis
Redis servisi ve ayarları düzgunsa,Redis Test Success: Hello Redis from CodeIgniter!
gibi bir mesaj görmelisiniz.
Veritabanı İşlemi Örnekleri (MySQL/PostgreSQL)
Veritabanı örneklerini kullanmadan önce, CodeIgniter migrasyon komutuyla users
tablosunu oluşturmanız gerekir.
Veritabanı Yapısı Oluşturma (Migrasyon)
Terminalde CodeIgniter proje dizinine gidin:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Migrasyon dosyası oluşturun: CodeIgniter CLI ile
users
tablosunun yapısını tanımlayacak bir migrasyon dosyası üretin:bashphp spark make:migration create_users_table
1Bu işlem,
app/Database/Migrations
klasöründe yeni bir PHP dosyası oluşturacaktır.Migrasyon dosyasını düzenleyin: Üretilen migrasyon dosyasını açın (dosya adı
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
gibi görünecek),up()
metodundausers
tablosunun sütunlarını ve indexlerini tanımlayın. MySQL ve PostgreSQL'de otomatik zaman damgası varsayılan değerlerinin yazımında küçük farklar olabilir (CURRENT_TIMESTAMP
vs.NOW()
). CodeIgniter'ınRawSql
sınıfı bu konuda yardımcı olur. Bir örnek aşağıda:php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // RawSql sınıfını dahil ettiğ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 olmalı ], 'created_at' => [ 'type' => 'TIMESTAMP', // Veritabanı tipine göre 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 anahtarı $this->forge->createTable('users'); // users tablosunu oluştur } public function down() { // Migrasyonu geri almak için users tablosunu siler $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: Yukarıdaki örnekte, varsayılan zaman damgası ifadesi veritabanı platformuna göre dinamik olarak belirlenir. Gerçek projelerde daha sağlam migrasyon stratejileri veya ayrı ayrı migrasyon dosyaları gerekebilir.
Migrasyonu çalıştırın: Terminalde aşağıdaki komutu girerek migrasyonu başlatın ve
users
tablosunu oluşturun:bashphp spark migrate
1Başarılı olursa ekranda başarılı migrasyon mesajı göreceksiniz. Ayrıca Adminer gibi ServBay’in veritabanı yönetim aracı ile de
servbay_codeigniter_app
veritabanındausers
tablosunun oluştuğunu kontrol edebilirsiniz.
Veritabanı Örneklerine Erişim
app/Config/Database.php
dosyasında veritabanı bağlantı ayarlarının doğru olduğundan ve migrasyonun başarılı şekilde çalıştığından emin olun.
Veritabanına kullanıcı ekleyin:
https://servbay-codeigniter-test.local/add-user
adresine gidin. Her ziyaretinizde,users
tablosuna yeni bir kullanıcı kaydı eklenir.User added successfully: [email protected]
gibi bir mesaj göreceksiniz.Veritabanındaki kullanıcıları listeleyin:
https://servbay-codeigniter-test.local/list-users
Tüm kullanıcıları JSON formatında göreceksiniz.
Sonuç
Bu adımları takip ederek, macOS üzerinde ServBay ortamında başarıyla bir CodeIgniter projesi oluşturup konfigüre ettiniz ve çalıştırdınız. Composer ile projeyi oluşturmayı, ServBay’in web sitesi fonksiyonu ile doğru klasöre yönlendirmeyi, CodeIgniter’da veritabanı ve önbellek bağlantısını yapılandırmayı ve örnek kodlar ile bu entegrasyonları test etmeyi öğrendiniz. ServBay, yerel geliştirme ortamı kurulumunu ve yönetimini kolaylaştırarak, CodeIgniter uygulama geliştirmeye odaklanmanıza olanak tanır.