ServBay'da ThinkPHP 8 Projesi Oluşturma ve Çalıştırma
Bu belgede, ServBay'in güçlü yerel web geliştirme ortamını kullanarak ThinkPHP 8 tabanlı bir PHP projesini hızlıca nasıl oluşturacağınızı, yapılandıracağınızı ve çalıştıracağınızı adım adım bulabilirsiniz. ServBay, önceden yapılandırılmış PHP ortamı, web sunucuları (Caddy veya Nginx) ve birden çok veri tabanıyla ThinkPHP projeleri için kolay kurulum sağlar.
ThinkPHP Nedir?
ThinkPHP, Çin kaynaklı, açık kaynak kodlu, hızlı ve basit, nesne yönelimli bir PHP geliştirme çatısıdır. Sade ve verimli geliştirme felsefesine dayanır; modern web uygulamaları oluşturacak kullanışlı araçlar sağlar. Kullanım kolaylığı, kapsamlı özellikleri (güçlü ORM, esnek yönlendirme, dahili şablon motoru, önbellek desteği, vb.) ve dinamik topluluğu sayesinde ThinkPHP, Çin'deki PHP geliştiricileri arasında oldukça yaygındır.
ThinkPHP'nin Temel Özellikleri ve Avantajları
- Sade ve Verimli: Temiz kod yapısı ve kolay anlaşılır tasarımıyla yüksek geliştirme verimliliği sağlar.
- Kapsamlı Fonksiyonlar: MVC yapısı, ORM, şablon motoru, önbellek, oturum yönetimi, yetkilendirme, form tokenı gibi sık kullanılan bileşenler dahili olarak sunulur.
- Güçlü ORM: Veritabanı işlemlerini basitleştiren, kullanımı kolay ve güçlü nesne-ilişkisel eşleştirme.
- Esnek Yönlendirme: Karmaşık URL yapılarına esnek yönlendirme tanımlarıyla destek verir.
- Zengin Ekosistem: Çok sayıda eklenti, kütüphane ve aktif bir geliştirici topluluğu ile zengin kaynaklar sunar.
- Sürekli Güncel: Çatının sürümleri hızlıca güncellenir, PHP ve web geliştirme trendlerini yakından takip eder.
ThinkPHP, küçük projelerden kurumsal düzeyde büyük uygulamalara kadar her ölçekte web geliştirme için uygundur.
ServBay ile ThinkPHP 8 Projesi Kurmak
ServBay, ThinkPHP 8 projeleri için ideal bir yerel geliştirme ortamı sunar:
- Farklı PHP sürümleri ve yaygın uzantılar önceden kurulu gelir.
- Dahili web sunucu (Caddy veya Nginx) ile site ayarları kolaydır.
- MySQL, PostgreSQL, MongoDB, Redis, Memcached gibi veri tabanları entegredir.
- Composer paket yöneticisi dahili olarak mevcuttur.
Bu rehber, ServBay'in bu olanaklarını kullanarak ThinkPHP 8 projenizi hızlıca hayata geçirmenize yardımcı olur.
Ön Koşullar
Başlamadan önce aşağıdaki adımların tamamlandığından emin olun:
- macOS veya Windows sisteminize ServBay'i indirip kurdunuz.
- ServBay çalışıyor ve gerekli PHP sürümü (ThinkPHP 8 için PHP 8.0 veya üstü) ile ihtiyacınız olan veri tabanları (MySQL, PostgreSQL, Redis, Memcached vb.) etkin durumda. ServBay kontrol panelinin "Yazılım Paketleri" sekmesinden durumlarını kontrol edebilirsiniz.
ThinkPHP Projesi Oluşturma
ServBay, yerel site dosyalarınızın /Applications/ServBay/www
dizininde saklanmasını önerir. Bu sayede siteleriniz kolayca yönetilir.
Composer'ın Yüklü Olduğunu Doğrula
ServBay, Composer'ı önceden kurulu olarak sunar; ayrıca yüklemenize gerek yoktur. ServBay terminalinde
composer --version
komutunu çalıştırarak kontrol edebilirsiniz.Composer ile ThinkPHP Projesi Oluşturmak
macOS terminalini açıp aşağıdaki komutlarla ServBay site kökünde yeni bir ThinkPHP 8 projesi oluşturun:
bashcd /Applications/ServBay/www composer create-project topthink/think servbay-thinkphp-app
1
2Bu komut
/Applications/ServBay/www
klasöründeservbay-thinkphp-app
adlı yeni bir klasör açar ve ThinkPHP 8 dosyaları ile bağımlılıklarını indirir.Proje Dizinine Girin
Proje kurulduktan sonra, proje klasörüne geçin:
bashcd /Applications/ServBay/www/servbay-thinkphp-app
1
Proje Yapılandırmasını Başlatma
Proje oluşturulduktan sonra bazı temel ayarları yapmamız gerekir.
Veri Tabanı Bağlantı Bilgilerini Yapılandırma
ThinkPHP'de veri tabanı ayarı genellikle
config/database.php
dosyasında yapılır. ServBay'de hangi veri tabanı servislerini kullandığınıza göre bu dosyadaki bağlantı bilgilerini düzenlemelisiniz.ServBay'de varsayılan MySQL servisi için örnek bir ayar:
php<?php // config/database.php return [ // Varsayılan veritabanı bağlantı ayarı 'default' => env('database.driver', 'mysql'), // Tüm veritabanı bağlantı ayarları 'connections' => [ 'mysql' => [ // Veritabanı türü 'type' => 'mysql', // Sunucu adresi 'hostname' => env('database.hostname', '127.0.0.1'), // Veritabanı adı 'database' => env('database.database', 'servbay_thinkphp_app'), // Her proje için ayrı veritabanı önerilir // Kullanıcı adı 'username' => env('database.username', 'root'), // Şifre 'password' => env('database.password', 'password'), // ServBay varsayılan şifresi, sadece yerel geliştirme için! // Port 'hostport' => env('database.hostport', '3306'), // ... Diğer ayarlar ... ], // ... Diğer veritabanı bağlantı ayarları ... ], ];
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Önemli Bilgi:
database
değerini, oluşturduğunuz gerçek veritabanı adı ile değiştirin (örnek olarak ServBay'deki phpMyAdmin veya Adminer ileservbay_thinkphp_app
adında bir veritabanı oluşturabilirsiniz).- ServBay'de varsayılan
root
kullanıcısının şifresipassword
'dur. Bu şifre sadece yerel ortamda kullanılmalıdır, üretim ortamında kesinlikle kullanılmaz! Canlı ortamda mutlaka güçlü bir şifre ve minimum yetkili kullanıcılar kullanın. - Ortam değişkenleri için
.env
dosyası kullanıyorsanız,.env
dosyanızdaki ayarlarınconfig/database.php
varsayılanlarını geçersiz kıldığından emin olun.
Web Sunucu Ayarları
ThinkPHP için giriş dosyası public/index.php
'dir ve URL yönlendirmesi (Rewrite) kurallarına ihtiyaç duyar. ThinkPHP'nin yönlendirme sistemi statik dosya erişiminden farklıdır, bu yüzden ServBay'in dahili Rewrite kurallarını kullanmalısınız.
Site ayarlarında Rewrite menüsünden ThinkPHP
seçin ve kaydedin.
Detaylı site ekleme adımları için İlk Siteyi Ekle sayfasını inceleyin.
Örnek Kod Eklemek
Site kurulumunun ve yönlendirme ile temel işlevlerin test edilmesi için projeye basit bir yönlendirme ve denetleyici ekleyelim.
Proje dosyanızdaki /Applications/ServBay/www/servbay-thinkphp-app/route/app.php
dosyasını düzenleyerek aşağıdaki kodu ekleyin ve basit bir GET yönlendirmesi tanımlayın:
php
<?php
// route/app.php
use think\facade\Route;
// servbay yönlendirmesini tanımla, /servbay adresine gelince anonim fonksiyon çalışır
Route::get('servbay', function () {
return 'Hello ServBay!';
});
// ... Diğer yönlendirmeler ...
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Siteyi Ziyaret Etmek
Tüm adımlar bitince, web tarayıcınızı açıp, yerel alan adınızı ve eklediğiniz yönlendirme adresini ziyaret edin:
https://thinkphp.servbay.demo/servbay
Eğer her şey doğru yapılandırıldıysa, tarayıcıda Hello ServBay!
çıktısı görünecektir. Bu, ThinkPHP 8 projesinin ServBay ortamında başarıyla çalıştığını, web sunucu ve PHP-FPM ayarlarının aktif olduğunu gösterir.
NoSQL Veri Tabanı Örnekleri
ServBay; Memcached ve Redis gibi birçok NoSQL veri tabanını hazır olarak sunar. ThinkPHP ise önbellek soyutlama katmanıyla bu servislerin kolayca entegrasyonunu sağlar.
Memcached Örneği
Memcached Eklentisini Yükleme
ServBay'in PHP paketinde Memcached eklentisi önceden kurulu gelir. Sadece kontrol panelindeki "Yazılım Paketleri" sekmesinden Memcached servisini çalıştırdığınızdan emin olun.
Memcached Önbelleği Yapılandırmak
config/cache.php
dosyasını düzenleyerek ThinkPHP'nin Memcached'i önbellek sürücüsü olarak kullanmasını sağlayın:php<?php // config/cache.php return [ // Varsayılan önbellek sürücüsü 'default' => env('cache.driver', 'memcached'), // Önbellek bağlantı ayarları 'stores' => [ 'memcached' => [ // Önbellek türü 'type' => 'memcached', // Sunucu adresi 'host' => '127.0.0.1', // ServBay Memcached varsayılan adresi 'port' => 11211, // ServBay Memcached varsayılan portu 'persistent' => false, 'expire' => 0, 'timeout' => 0, 'prefix' => '', ], // ... Diğer önbellek ayarları ... ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23Kodda Memcached Kullanmak
Denetleyici veya yönlendirmede ThinkPHP'nin
Cache
facade'ı ile Memcached'e veri yazıp okuyabilirsiniz:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/memcached-example', function () { // Önbelleğe veri yaz, 600 saniye geçerli Cache::set('my_memcached_key', 'Bu değer Memcached\'den!', 600); // Önbellekten veri al $value = Cache::get('my_memcached_key'); return 'Memcached\'den gelen değer: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13https://thinkphp.servbay.demo/memcached-example
adresinden test edebilirsiniz.
Redis Örneği
Redis Eklentisi Yükleme
ServBay'in PHP paketinde Redis eklentisi önceden kurulu gelir. Yalnızca kontrol panelinde Redis servisinin çalıştığına bakın.
Redis Önbelleği Yapılandırmak
config/cache.php
dosyasında ThinkPHP'nin Redis'i önbellek sürücüsü olarak kullanmasını sağlayın:php<?php // config/cache.php return [ // Varsayılan önbellek sürücüsü 'default' => env('cache.driver', 'redis'), // Önbellek bağlantı ayarları 'stores' => [ 'redis' => [ // Önbellek türü 'type' => 'redis', // Sunucu adresi 'host' => env('cache.host', '127.0.0.1'), // ServBay Redis varsayılan adresi // Port 'port' => env('cache.port', 6379), // ServBay Redis varsayılan portu // Şifre (ServBay'de varsayılan olarak yok) 'password' => env('cache.password', ''), // Varsayılan olarak şifre yok 'select' => 0, 'timeout' => 0, 'expire' => 0, 'persistent' => false, 'prefix' => '', ], // ... Diğer önbellek ayarları ... ], ];
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
27Not: ServBay'de Redis şifresiz olarak gelir. Şifre eklediyseniz, ayarı burada güncelleyin.
Kodda Redis Kullanmak
Denetleyici veya yönlendirmede ThinkPHP'nin
Cache
facade'ı ile Redis'e veri yazıp okuyabilirsiniz:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/redis-example', function () { // Önbelleğe veri yaz, süresiz geçerli (veya 3. parametre ile süre belirleyin) Cache::set('my_redis_key', 'Redis\'ten Merhaba!'); // Önbellekten veri al $value = Cache::get('my_redis_key'); return 'Redis\'ten gelen değer: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13https://thinkphp.servbay.demo/redis-example
adresinden test edebilirsiniz.
İlişkisel Veri Tabanı Örnekleri
ServBay ile MySQL ve PostgreSQL gibi popüler ilişkisel veri tabanları hazır gelir. ThinkPHP'nin ORM altyapısı ile bu veri tabanlarına kolayca bağlanabilirsiniz.
ThinkPHP Veritabanı Göç Aracını Kullanmak
ThinkPHP'de veritabanı şemasının takibi ve ekip çalışmasında uyumluluk için göç (migration) aracı kullanılır.
Göç Aracını Kurmak
Proje klasörünüzde Composer ile ThinkPHP göç paketini kurun:
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration
1
2Göç Dosyası Oluşturmak
Komut satırı ile yeni bir göç dosyası üretin (örneğin "users" tablosu için):
bashphp think migrate:create CreateUserTable
1Bu,
database/migrations
içinde zaman damgalı bir dosya oluşturur (örneğin20231027100000_create_user_table.php
).Göç Dosyasını Düzenlemek
Yeni dosyada
up()
fonksiyonunu düzenleyipusers
tablosunun yapısını tanımlayın:php<?php // database/migrations/YYYYMMDDHHMMSS_create_user_table.php use think\migration\Migrator; use think\migration\db\Column; class CreateUserTable extends Migrator { /** * Change Method. * * Write your reversible migrations using this method. * * More information on writing migrations is available here: * http://docs.phinx.org/en/latest/migrations.html#the-change-method * * The following commands can be used in this method and Phinx will * automatically reverse them when rolling back: * * createTable * renameTable * addColumn * addCustomColumn * renameColumn * addIndex * addForeignKey * createDatabase * renameDatabase * dropTable * dropColumn * dropIndex * dropForeignKey */ public function change() { // createTable fonksiyonu ile tablo açılır $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'Kullanıcı Adı']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'E-posta Adresi']) ->addIndex(['email'], ['unique' => true]) // Tekil dizin ekle ->addTimestamps() // created_at ve updated_at alanlarını ekle ->create(); // Oluşturmayı uygula } // change kullanılmazsa ayrı up() ve down() fonksiyonları da tanımlanabilir /* public function up() { $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'Kullanıcı Adı']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'E-posta Adresi']) ->addIndex(['email'], ['unique' => true]) ->addTimestamps() ->create(); } public function down() { $this->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
52
53
54
55
56
57
58
59
60
61
62Veritabanı Göçünü Çalıştırmak
ServBay terminalindeyken, proje kök klasöründe aşağıdaki komutu çalıştırın:
bashphp think migrate:run
1Başarılıysa veritabanında yeni bir
users
tablosu açılır.
MySQL Örneği
ServBay'de MySQL servisini etkinleştirip, ayarları config/database.php
'de doğru şekilde yaptığınızdan emin olun.
MySQL Bağlantısı Ayarları
"Proje Yapılandırmasını Başlatma" kısmındaki örneğe başvurun ve bağlantı bilgilerinin doğru olduğundan emin olun.
Kodda Kullanıcı Verisi Yazmak
ThinkPHP'de
Db
facade veya model ile veri ekleme işlemini yapabilirsiniz. AşağıdaDb
facade ile örnek bir kod:php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-add-user', function () { try { Db::table('users')->insert([ 'name' => 'ServBay Demo Kullanıcı', 'email' => 'demo@servbay.demo', // Marka örnek e-posta 'created_at' => date('Y-m-d H:i:s'), // Eğer addTimestamps() otomatik doldurmuyorsa elle ekle 'updated_at' => date('Y-m-d H:i:s'), ]); return 'Kullanıcı başarıyla eklendi!'; } catch (\Exception $e) { return 'Kullanıcı eklenirken hata: ' . $e->getMessage(); } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17https://thinkphp.servbay.demo/mysql-add-user
adresiyle ekleme işlemini test edin.Kodda Kullanıcı Verisi Okumak
Veriyi okumak için yine
Db
facade veya model kullanılabilir:php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-users', function () { $users = Db::table('users')->select(); // Tüm kullanıcıları al return json($users); // Sonucu JSON olarak döndür });
1
2
3
4
5
6
7
8Kullanıcı verilerini görmek için
https://thinkphp.servbay.demo/mysql-users
adresini kullanın.
PostgreSQL Örneği
ServBay'de PostgreSQL servisini başlatıp, config/database.php
ayarlarını uygun şekilde düzenleyin.
PostgreSQL Bağlantısı Ayarları
config/database.php
dosyanızda aşağıdaki gibi bir PostgreSQL ayarı olmalı:php<?php // config/database.php (parça) return [ // ... Diğer ayarlar ... 'connections' => [ // ... MySQL ayarları ... 'pgsql' => [ // Veritabanı türü 'type' => 'pgsql', // Sunucu adresi 'hostname' => env('database.hostname', '127.0.0.1'), // Veritabanı adı 'database' => env('database.database', 'servbay_thinkphp_app'), // Her proje için ayrı veritabanı önerilir // Kullanıcı adı 'username' => env('database.username', 'root'), // Şifre 'password' => env('database.password', 'password'), // ServBay varsayılan şifresi, sadece yerel geliştirme için! // Port 'hostport' => env('database.hostport', '5432'), // PostgreSQL varsayılan portu // ... Diğer ayarlar ... ], // ... Diğer veritabanı bağlantı ayarları ... ], ];
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Önemli Bilgi:
- MySQL'de olduğu gibi, projeye özel bir PostgreSQL veritabanı açın ve bağlantıda bunu belirtin.
- ServBay'de PostgreSQL için de varsayılan
root
şifresipassword
'dur, sadece yerel ortamda kullanılır.
Kodda Kullanıcı Verisi Yazmak
ThinkPHP'nin
Db
facade veya modeliyle veri eklerken pgsql bağlantısını işaret edin:php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-add-user', function () { try { Db::connect('pgsql')->table('users')->insert([ // pgsql bağlantısını kullan 'name' => 'ServBay PgSQL Kullanıcı', 'email' => 'pgsql-demo@servbay.demo', // Marka örnek e-posta // Zaman damgası alanları, migration ve ThinkPHP sürümüne göre elle eklenebilir 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); return 'PostgreSQL kullanıcısı başarıyla eklendi!'; } catch (\Exception $e) { return 'PostgreSQL kullanıcısı eklenirken hata: ' . $e->getMessage(); } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Veri ekleme için
https://thinkphp.servbay.demo/pgsql-add-user
adresini kullanın.Kodda Kullanıcı Verisi Okumak
Veriyi okurken pgsql bağlantısını belirtin:
php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-users', function () { $users = Db::connect('pgsql')->table('users')->select(); // pgsql bağlantısı ile veri al return json($users); // Sonucu JSON olarak döndür });
1
2
3
4
5
6
7
8Kayıtları görmek için
https://thinkphp.servbay.demo/pgsql-users
adresini kullanabilirsiniz.
Sonuç
Tüm adımları tamamladığınızda ServBay yerel geliştirme ortamında ThinkPHP 8 projesini başarıyla kurmuş, yapılandırmış ve çalıştırmış olacaksınız. Composer ile proje açmayı, Caddy web sunucusunu ayarlamayı, ThinkPHP yönlendirmelerini yönetmeyi, ServBay'in sunduğu MySQL, PostgreSQL, Memcached ve Redis veri tabanlarını projeye bağlamayı öğrendiniz.
ServBay, ThinkPHP ve benzeri PHP çatılarında yerel geliştirme ortamını son derece kolaylaştırır; iş mantığına odaklanmanıza olanak tanır. Artık uygulamanızı geliştirmeye devam edebilir, ServBay'in sunduğu farklı paket ve özelliklerden en iyi şekilde yararlanabilirsiniz.