ServBay ile ThinkPHP 8 Projesi Oluşturma ve Çalıştırma
Bu makalede, güçlü bir yerel web geliştirme ortamı olan ServBay kullanarak ThinkPHP 8 çatısı ile oluşturulan bir PHP projesini nasıl hızlıca kurup, yapılandırıp çalıştıracağınızı adım adım anlatıyoruz. ServBay, önceden yapılandırılmış PHP ortamı, web sunucusu (Caddy veya Nginx) ve çeşitli veri tabanları ile ThinkPHP projelerinin yerel kurulumu sürecini büyük ölçüde kolaylaştırır.
ThinkPHP Nedir?
ThinkPHP, Çin kaynaklı, açık kaynaklı, hızlı ve nesne yönelimli bir PHP geliştirme çatısıdır. Basitlik ve verimlilik ilkelerini temel alan ThinkPHP, geliştiricilere modern web uygulamaları geliştirmek için kullanışlı araç lar sunar. Kolay kullanımı, zengin özellikleri (güçlü ORM, esnek yönlendirme, dahili şablon motoru, önbellek desteği vb.) ve aktif topluluğu ile Çin’de PHP geliştiricileri arasında oldukça yaygındır.
ThinkPHP'nin Başlıca Özellikleri ve Avantajları
- Basit ve Verimli: Çatı, net ve temiz kod yapısı ile kolay anlaşılır ve bakım dostudur; geliştirme hızı yüksektir.
- Kapsamlı Özellikler: MVC yapısı, ORM, şablon motoru, önbellek, oturum yönetimi, yetkilendirme, form token’ı gibi web geliştirme için gerekli birçok özellik dahili olarak gelir.
- Güçlü ORM: Kullanımı kolay, güçlü nesne-ilişkisel haritalama sistemiyle veri tabanı işlemlerini kolaylaştırır.
- Esnek Yönlendirme: Karmaşık URL yapıları için çoklu yönlendirme tanımlama yöntemleri sunar.
- Zengin Ekosistem: Çok sayıda eklenti ve kütüphane ile geniş, aktif geliştirici topluluğu sayesinde zengin kaynaklara sahiptir.
- Sürekli Güncellenir: Çatı, PHP dilinin gelişimine ve web trendlerine ayak uydurarak hızlı sürüm güncellemeleri alır.
ThinkPHP, küçük çaplı projelerden büyük kurumsal uygulamalara kadar her ölçekten web geliştirme ihtiyacına uygundur.
ServBay ile ThinkPHP 8 Projesi Kurulumu
ServBay, ThinkPHP 8 projesi geliştirmek için ideal olanaklar sağlar:
- Farklı PHP sürümleri ve sık kullanılan uzantılar önceden kurulu gelir.
- Dahili web sunucusu (Caddy veya Nginx) ile web sitesi yapılandırması kolaydır.
- MySQL, PostgreSQL, MongoDB, Redis, Memcached gibi veri tabanları entegredir.
- Composer bağımlılık yöneticisi dahili olarak sunulur.
Bu rehberde, ServBay’in bu avantajlarını kullanarak ThinkPHP 8 projenizi hızlıca başlatacaksınız.
Ön Koşullar
Başlamadan önce aşağıdakileri tamamlayınız:
- macOS sisteminizde ServBay’i indirip kurdunuz.
- ServBay çalışıyor, istenen PHP sürümü (ThinkPHP 8 için PHP 8.0 veya üzeri) ve gerekli veri tabanı servisleri (MySQL, PostgreSQL, Redis, Memcached vb.) başlatılmış durumda. Bunları ServBay kontrol panelindeki “Paketler” sekmesinden kontrol edebilirsiniz.
ThinkPHP Projesi Oluşturma
ServBay, projelerinizi /Applications/ServBay/www
dizininde tutmanızı önerir. Bu sayede ServBay, web sitelerinizi daha kolay yönetebilir.
Composer'ın Kurulu Olduğunu Doğrulayın
ServBay yüklenirken Composer da otomatik olarak kurulur; ek bir kurulum gerekmez. Konsoldan
composer --version
komutunu yazarak kurulum başarılı mı kontrol edebilirsiniz.Composer ile ThinkPHP Projesi Oluşturun
macOS Terminal'i açın ve aşağıdaki komutlarla ServBay web kök dizininde yeni bir ThinkPHP 8 projesi oluşturun:
bashcd /Applications/ServBay/www composer create-project topthink/think servbay-thinkphp-app
1
2Bu işlem,
/Applications/ServBay/www
altındaservbay-thinkphp-app
adlı bir klasör oluşturacak ve ThinkPHP 8’in temel dosyalarıyla bağımlılıklarını indirecektir.Proje Dizinine Girin
Proje oluşturulduktan sonra klasöre geçin:
bashcd /Applications/ServBay/www/servbay-thinkphp-app
1
Proje Yapılandırmasının Başlatılması
Proje oluşturulduktan sonra, temel yapılandırmaları tamamlamanız gerekir.
Veri Tabanı Bağlantı Bilgisini Yapılandırma
ThinkPHP’de veri tabanı ayarları genellikle
config/database.php
içerisinde yapılır. ServBay’de çalıştırdığınız veri tabanı servisine uygun şekilde bu dosyayı düzenleyin.Aşağıda, ServBay’in varsayılan MySQL servisi için örnek bir yapılandırma bulabilirsiniz:
php<?php // config/database.php return [ // Varsayılan veritabanı bağlantısı yapılandırması 'default' => env('database.driver', 'mysql'), // Tüm veritabanı bağlantı yapılandırmaları '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 şifre; sadece yerel geliştirme için kullanın! // Port 'hostport' => env('database.hostport', '3306'), // ... Diğer yapılandırmalar ... ], // ... Diğer veritabanı bağlantıları ... ], ];
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 Notlar:
database
değerini, ilgili projeye özel oluşturduğunuz gerçek veritabanı adıyla değiştirin (ör., ServBay’in phpMyAdmin’i veya Adminer’ı ileservbay_thinkphp_app
adında bir veritabanı oluşturabilirsiniz).- ServBay’in
root
kullanıcısı şifresipassword
'dır. Bu şifre sadece yerel geliştirme ortamı içindir, kesinlikle üretim ortamında kullanılmamalıdır! Üretimde güçlü şifreler ve minimum yetkiye sahip ayrı kullanıcılar kullanın. - Ortam değişkenlerini
.env
dosyasında yönetiyorsanız, burada yaptığınız tanımlarınconfig/database.php
'deki varsayılan değerleri ezdiğine emin olun.
Web Sunucusu Yapılandırması
ThinkPHP'nin giriş noktası public/index.php
dosyasıdır ve URL Rewrite kuralları gerektirir. Klasik statik dosya erişimlerinden farklı olarak, ThinkPHP yönlendirme özelliklerini etkinleştirmek için ServBay’in dahili Rewrite kurallarını kullanmanız gerekir.
Web sitesi ayarlarında “Rewrite kuralları” açılır menüsünden ThinkPHP
’yi seçin ve kaydedin.
Detaylı ServBay web sitesi kurulum adımları için İlk Web Sitenizi Ekleyin kısmına göz atabilirsiniz.
Örnek Kod Ekleme
Kurulumun başarıyla olup olmadığını ve ThinkPHP'nin temel yönlendirme fonksiyonlarını test etmek için projeye basit bir rota ve kontrolcü ekleyelim.
Proje dosyanız /Applications/ServBay/www/servbay-thinkphp-app/route/app.php
’yi düzenleyip aşağıdaki kod ile basit bir GET rotası ekleyin:
<?php
// route/app.php
use think\facade\Route;
// 'servbay' rotasını tanımla, /servbay adresine gelenler anonim fonksiyonu çalıştırır
Route::get('servbay', function () {
return 'Hello ServBay!';
});
// ... Diğer rotalar ...
2
3
4
5
6
7
8
9
10
11
Siteye Erişim
Artık web tarayıcınızda tanımladığınız yerel domain ve örnek rotayla siteye ulaşabilirsiniz:
https://thinkphp.servbay.demo/servbay
Eğer tüm ayarlar doğruysa, tarayıcıda “Hello ServBay!” çıkışı göreceksiniz. Bu, ThinkPHP 8 projesinin ServBay ortamında çalıştığını ve PHP-FPM ile web sunucusu yapılandırmasının doğru yapıldığını gösterir.
NoSQL Veri Tabanı Örnekleri
ServBay, Memcached ve Redis gibi çeşitli NoSQL veritabanlarını önceden kurulu olarak sunar. ThinkPHP, bu NoSQL hizmetlerini önbellek sürücüsü olarak entegre etmek için kullanımı kolay bir önbellek soyutlama katmanı sunar.
Memcached Örneği
Memcached Eklentisinin Kurulu Olduğunu Kontrol Edin
ServBay, PHP paketleriyle birlikte Memcached uzantısını kurar. “Paketler” sekmesinden Memcached servisinin çalıştığını doğrulayabilirsiniz.
Memcached Önbellek Yapılandırması
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'), // Olası önbellek bağlantıları '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 Önbellek Kullanımı
ThinkPHP’nin
Cache
Facade’ı ile Memcached üzerinde veri saklama ve okuma:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/memcached-example', function () { // 600 saniyelik önbellek ayarla Cache::set('my_memcached_key', 'This value is from Memcached!', 600); // Önbellekten oku $value = Cache::get('my_memcached_key'); return 'Value from Memcached: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13https://thinkphp.servbay.demo/memcached-example
adresine giderek test edebilirsiniz.
Redis Örneği
Redis Eklentisinin Kurulu Olduğunu Kontrol Edin
ServBay, PHP paketleriyle birlikte Redis uzantısını kurar. “Paketler” sekmesinden Redis servisini başlattığınızdan emin olun.
Redis Önbellek Yapılandırması
config/cache.php
dosyasında ThinkPHP’yi Redis’i önbellek sürücüsü olarak kullanacak şekilde ayarlayın:php<?php // config/cache.php return [ // Varsayılan önbellek sürücüsü 'default' => env('cache.driver', 'redis'), // Olası önbellek bağlantıları 'stores' => [ 'redis' => [ // Önbellek tipi '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 varsayılanı boş) 'password' => env('cache.password', ''), // ServBay Redis varsayılanı boş '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
27Dikkat: Varsayılan ServBay Redis kurulumu için şifre belirtilmez. El ile şifre eklediyseniz,
password
alanını burada güncelleyin.Kodda Redis Önbellek Kullanımı
ThinkPHP’nin
Cache
Facade’ı ile Redis üzerinde veri saklama ve okuma:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/redis-example', function () { // Önbelleği süresiz ayarla (veya üçüncü parametre ile süre belirtebilirsiniz) Cache::set('my_redis_key', 'Hello from Redis!'); // Önbellekten oku $value = Cache::get('my_redis_key'); return 'Value from Redis: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13https://thinkphp.servbay.demo/redis-example
adresiyle test edebilirsiniz.
İlişkisel Veri Tabanı Örnekleri
ServBay, MySQL ve PostgreSQL gibi popüler ilişkisel veri tabanlarını entegre bir şekilde sunar. ThinkPHP’nin ORM’i ile bu veri tabanlarıyla kolayca çalışabilirsiniz.
ThinkPHP Veri Tabanı Göç Aracı (Migration) Kullanımı
ThinkPHP’de, veri tabanı yapısındaki değişiklikleri daha kolay yönetmek için migration aracı kullanılır. Bu yöntemle takım çalışması ve sürüm kontrolü de kolaylaşır.
Migration Eklentisini Kurun
Proje kök dizininde Composer ile ThinkPHP migration eklentisini kurun:
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration
1
2Göç Dosyası Oluşturun
ThinkPHP komut satırı aracı ile yeni bir migration dosyası oluşturun. Örneğin,
users
tablosu için:bashphp think migrate:create CreateUserTable
1Bu,
database/migrations
altında zaman damgalı ve sizin belirlediğiniz isimde bir PHP dosyası oluşturur (örn.20231027100000_create_user_table.php
).Mission Dosyasını Düzenleyin
Yeni dosyada,
up()
metodundausers
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 metodu ile tablo oluşturuluyor $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'Kullanıcı ismi']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'E-posta adresi']) ->addIndex(['email'], ['unique' => true]) // Tekil index ekle ->addTimestamps() // created_at ve updated_at alanlarını ekle ->create(); // Oluşturmayı uygula } // change metodu yerine up() ve down() metodları da kullanılabilir /* public function up() { $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'Kullanıcı ismi']) ->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
62Migration’ı Çalıştırın
Proje kökünde ServBay terminalinden migration komutunu çalıştırarak
users
tablosunu oluşturun:bashphp think migrate:run
1Başarılıysa veritabanınızda yeni
users
tablosunu görmelisiniz.
MySQL Örneği
ServBay’de MySQL’i başlattığınızı ve config/database.php
’de bağlantıyı yapılandırdığınızı varsayalım.
MySQL Bağlantısı Yapılandırması
“Proje yapılandırmasının başlatılması” başlığındaki örnek MySQL bağlantı yapılandırmasını tekrar inceleyip
config/database.php
’de güncellediğinizden emin olun.Koda Kullanıcı Verisi Yazma
ThinkPHP’nin
Db
Facade’ı veya ORM modeliyle veri ekleyebilirsiniz. AşağıdaDb
Facade’ı ile örnek:php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-add-user', function () { try { Db::table('users')->insert([ 'name' => 'ServBay Demo User', 'email' => '[email protected]', // Marka örnek e-posta 'created_at' => date('Y-m-d H:i:s'), // addTimestamps() otomatik doldurmadıysa elle girin 'updated_at' => date('Y-m-d H:i:s'), ]); return 'User added successfully!'; } catch (\Exception $e) { return 'Error adding user: ' . $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.Koda Kullanıcı Verisi Okuma
Db
Facade’ı veya ORM ile sorgulama yapabilirsiniz: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ı getir return json($users); // Sonucu JSON olarak döndür });
1
2
3
4
5
6
7
8https://thinkphp.servbay.demo/mysql-users
adresine giderekusers
tablosunu görüntüleyebilirsiniz.
PostgreSQL Örneği
ServBay’de PostgreSQL’i başlatıp, config/database.php
ayarlarını yaptığınızı varsayalım.
PostgreSQL Bağlantısı Yapılandırması
config/database.php
'de aşağıdaki gibi (gerçek ayarlarınıza göre) PostgreSQL bağlantınızı eklediğinizden emin olun:php<?php // config/database.php (kısmı) return [ // ... Diğer ayarlar ... 'connections' => [ // ... MySQL ayarları ... 'pgsql' => [ // Veri tabanı türü 'type' => 'pgsql', // Sunucu adresi 'hostname' => env('database.hostname', '127.0.0.1'), // Veri tabanı adı 'database' => env('database.database', 'servbay_thinkphp_app'), // Her proje için ayrı veri tabanı önerilir // Kullanıcı adı 'username' => env('database.username', 'root'), // Şifre 'password' => env('database.password', 'password'), // ServBay varsayılan şifresi; sadece yerel geliştirmede kullanılmalı! // Port 'hostport' => env('database.hostport', '5432'), // PostgreSQL varsayılan portu // ... Diğer ayarlar ... ], // ... Diğer bağlantılar ... ], ];
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 Notlar:
- MySQL’de olduğu gibi, proje özelinde ayrı bir PostgreSQL veri tabanı oluşturun ve ayarları girin.
- ServBay’in PostgreSQL için varsayılan
root
şifresipassword
'dır; sadece yerel kullanım için.
Koda Kullanıcı Ekleme
ThinkPHP’nin
Db
Facade’ı veya ORM modeliyle veri ekleyebilir,pgsql
bağlantısını belirtebilirsiniz:php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-add-user', function () { try { Db::connect('pgsql')->table('users')->insert([ 'name' => 'ServBay PgSQL User', 'email' => '[email protected]', // Marka örnek e-posta 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); return 'PostgreSQL User added successfully!'; } catch (\Exception $e) { return 'Error adding PostgreSQL user: ' . $e->getMessage(); } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17https://thinkphp.servbay.demo/pgsql-add-user
adresiyle ekleme işlemini test edin.Koda Kullanıcı Verisi Okuma
Db
Facade’ı veya ORM ile sorgulama, bu kezpgsql
bağlantısı kullanılarak yapılmalı: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 verileri çek return json($users); // Sonucu JSON olarak döndür });
1
2
3
4
5
6
7
8https://thinkphp.servbay.demo/pgsql-users
üzerinden PostgreSQL tablonuzu görebilirsiniz.
Sonuç
Bu adımlar ile, ServBay yerel geliştirme ortamını kullanarak bir ThinkPHP 8 projesini kurup yapılandırıp çalıştırdınız. ServBay'in dahili Composer desteği ile proje oluşturma, Caddy web sunucusunda ThinkPHP yönlendirmelerinin yapılandırılması ve MySQL, PostgreSQL, Memcached, Redis gibi veri tabanı servislerine bağlantı ve kullanım adımlarını uyguladınız.
ServBay, ThinkPHP ve benzeri PHP çatılarıyla modern uygulamaların yerel geliştirme süreçlerini önemli ölçüde basitleştirir; böylece siz iş mantığına odaklanabilirsiniz. Artık ServBay’in sunduğu çeşitli paket ve fonksiyonlardan tam olarak yararlanarak ThinkPHP uygulamanızı geliştirmeye devam edebilirsiniz.