{"id":31662,"date":"2025-10-12T12:42:00","date_gmt":"2025-10-12T09:42:00","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=31662"},"modified":"2025-10-12T12:42:00","modified_gmt":"2025-10-12T09:42:00","slug":"fat-free-framework-nedir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/","title":{"rendered":"Fat-Free Framework Nedir?"},"content":{"rendered":"<p><body><\/p>\n<p>PHP ekosisteminde bir\u00e7ok farkl\u0131 framework bulunmaktad\u0131r ve her biri belirli ihtiya\u00e7lara y\u00f6nelik \u00e7\u00f6z\u00fcmler sunar. Bu \u00e7e\u015fitlilik i\u00e7inde, hafifli\u011fi, h\u0131z\u0131 ve kullan\u0131m kolayl\u0131\u011f\u0131 ile \u00f6ne \u00e7\u0131kan bir se\u00e7enek de Fat-Free Framework (F3) olarak kar\u015f\u0131m\u0131za \u00e7\u0131kar. Bu rehberde, F3&#8217;\u00fc nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131, temel \u00f6zelliklerini ve pratik uygulamalar\u0131n\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz.<\/p>\n<hr>\n<h2>Fat-Free Framework Nedir?<\/h2>\n<p>Fat-Free Framework, k\u0131saca F3, PHP i\u00e7in tasarlanm\u0131\u015f, a\u00e7\u0131k kaynakl\u0131, hafif ve y\u00fcksek performansl\u0131 bir web uygulama \u00e7at\u0131s\u0131d\u0131r. &#8220;Fat-Free&#8221; (ya\u011fs\u0131z) ismi, framework&#8217;\u00fcn minimalist yakla\u015f\u0131m\u0131n\u0131 ve d\u00fc\u015f\u00fck kaynak t\u00fcketimini vurgular. Di\u011fer baz\u0131 b\u00fcy\u00fck framework&#8217;lerin aksine, F3 sadece birka\u00e7 dosyadan olu\u015fur ve projenize dahil etmesi son derece kolayd\u0131r.<\/p>\n<p>F3&#8217;\u00fcn temel felsefesi, geli\u015ftiricilere m\u00fcmk\u00fcn oldu\u011funca fazla esneklik sunarken, ayn\u0131 zamanda h\u0131zl\u0131 prototipleme ve sa\u011flam uygulamalar geli\u015ftirmek i\u00e7in gerekli ara\u00e7lar\u0131 sa\u011flamakt\u0131r. MVC (Model-View-Controller) prensiplerini desteklese de, sizi kat\u0131 bir yap\u0131ya zorlamaz; bu da onu k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli projeler, API&#8217;ler veya h\u0131zl\u0131 \u00e7\u00f6z\u00fcmler i\u00e7in ideal k\u0131lar. Dahili URL y\u00f6nlendirme, veritaban\u0131 soyutlama katmanlar\u0131, \u015fablon motoru, oturum y\u00f6netimi ve \u00f6nbellekleme gibi bir\u00e7ok temel bile\u015feni b\u00fcnyesinde bar\u0131nd\u0131r\u0131r.<\/p>\n<p>E\u011fer projeniz i\u00e7in y\u00fcksek \u00f6\u011frenme e\u011frisi olmayan, h\u0131zl\u0131ca aya\u011fa kald\u0131rabilece\u011finiz ve performanstan \u00f6d\u00fcn vermeyen bir \u00e7\u00f6z\u00fcm ar\u0131yorsan\u0131z, Fat-Free Framework kesinlikle g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z gereken bir se\u00e7enektir.<\/p>\n<hr>\n<h2>Kurulum ve \u0130lk Ad\u0131mlar<\/h2>\n<p>Fat-Free Framework&#8217;\u00fc kullanmaya ba\u015flamak olduk\u00e7a basittir. Geleneksel Composer tabanl\u0131 kurulumun yan\u0131 s\u0131ra, framework dosyalar\u0131n\u0131 do\u011frudan indirip projenize dahil etme esnekli\u011fi de sunar.<\/p>\n<h3>Composer ile Kurulum<\/h3>\n<p>Modern PHP projelerinde Composer kullanmak en yayg\u0131n ve \u00f6nerilen y\u00f6ntemdir. Projenizin k\u00f6k dizininde a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">composer require bcosca\/fatfree-core<\/code><\/pre>\n<p>Bu komut, F3&#8217;\u00fc projenize dahil edecek ve <code>vendor<\/code> dizini alt\u0131nda gerekli dosyalar\u0131 olu\u015fturacakt\u0131r.<\/p>\n<h3>Manuel Kurulum (Alternatif)<\/h3>\n<p>E\u011fer Composer kullanmak istemiyorsan\u0131z, F3&#8217;\u00fcn resmi web sitesinden (fatfreeframework.com) en son s\u00fcr\u00fcm\u00fc indirip, zip dosyas\u0131n\u0131 projenizin istedi\u011finiz bir dizinine (\u00f6rne\u011fin <code>lib<\/code> veya <code>vendor<\/code>) a\u00e7man\u0131z yeterlidir.<\/p>\n<h3>\u0130lk Uygulama: &#8220;Merhaba D\u00fcnya!&#8221;<\/h3>\n<p>Kurulum tamamland\u0131ktan sonra, basit bir &#8220;Merhaba D\u00fcnya!&#8221; uygulamas\u0131 ile F3&#8217;\u00fcn nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6relim. Genellikle, t\u00fcm istekleri y\u00f6nlendirecek tek bir ana giri\u015f dosyas\u0131 (<code>index.php<\/code>) bulunur.<\/p>\n<p>Projenizin k\u00f6k dizininde <code>index.php<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7ine a\u015fa\u011f\u0131daki kodu ekleyin:<\/p>\n<pre><code class=\"language-php\"><?php\n\n\/\/ Composer autoload dosyas\u0131n\u0131 dahil et (Composer kullan\u0131yorsan\u0131z)\nrequire __DIR__ . '\/vendor\/autoload.php';\n\n\/\/ Manuel kurulum kullan\u0131yorsan\u0131z, F3 ana dosyas\u0131n\u0131 dahil edin:\n\/\/ require __DIR__ . '\/lib\/base.php'; \n\n\/\/ F3 \u00f6rne\u011fini ba\u015flat\n$f3 = \\Base::instance();\n\n\/\/ Uygulaman\u0131n hata ay\u0131klama modunu ayarla (geli\u015ftirmede 3, \u00fcretimde 0)\n$f3->set('DEBUG', 3);\n\n\/\/ Bir GET iste\u011fi i\u00e7in rota tan\u0131mla\n$f3->route('GET \/', function() {\n    echo 'Merhaba D\u00fcnya!';\n});\n\n\/\/ Uygulamay\u0131 \u00e7al\u0131\u015ft\u0131r\n$f3->run();\n\n?><\/code><\/pre>\n<p>Bu kod par\u00e7as\u0131:<\/p>\n<ol>\n<li>F3&#8217;\u00fcn ana s\u0131n\u0131f\u0131n\u0131 (<code>Base.php<\/code>) y\u00fckler (Composer ile veya manuel olarak).<\/li>\n<li>F3&#8217;\u00fcn bir \u00f6rne\u011fini olu\u015fturur.<\/li>\n<li>Hata ay\u0131klama seviyesini ayarlar.<\/li>\n<li><code>\/<\/code> URL&#8217;sine gelen GET istekleri i\u00e7in bir rota tan\u0131mlar. Bu rota, basit\u00e7e &#8220;Merhaba D\u00fcnya!&#8221; metnini ekrana basar.<\/li>\n<li>Uygulamay\u0131 ba\u015flat\u0131r ve tan\u0131mlanan rotalar\u0131 i\u015fler.<\/li>\n<\/ol>\n<h3>URL Y\u00f6nlendirme i\u00e7in .htaccess<\/h3>\n<p>Sunucunuzun t\u00fcm istekleri <code>index.php<\/code> dosyas\u0131na y\u00f6nlendirmesi i\u00e7in Apache sunucular\u0131nda <code>.htaccess<\/code> dosyas\u0131na ihtiyac\u0131n\u0131z olacakt\u0131r. Projenizin k\u00f6k dizininde <code>.htaccess<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7ine a\u015fa\u011f\u0131daki kodu ekleyin:<\/p>\n<pre><code class=\"language-apache\">RewriteEngine On\nRewriteBase \/\n\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteRule ^(.*)$ index.php [L,QSA]<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma, var olmayan dosya veya dizin isteklerini <code>index.php<\/code>&#8216;ye y\u00f6nlendirir, b\u00f6ylece F3 rotalama mekanizmas\u0131 devreye girer. Art\u0131k taray\u0131c\u0131n\u0131zdan projenizin URL&#8217;sine gitti\u011finizde &#8220;Merhaba D\u00fcnya!&#8221; \u00e7\u0131kt\u0131s\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<hr>\n<h2>Temel \u00d6zellikler ve Kullan\u0131m<\/h2>\n<p>Fat-Free Framework&#8217;\u00fcn g\u00fcc\u00fc, sundu\u011fu basit ama etkili temel \u00f6zelliklerde yatar. Bu b\u00f6l\u00fcmde, en s\u0131k kullanaca\u011f\u0131n\u0131z F3 bile\u015fenlerine yak\u0131ndan bakaca\u011f\u0131z.<\/p>\n<h3>1. Y\u00f6nlendirme (Routing)<\/h3>\n<p>F3&#8217;\u00fcn temelinde g\u00fc\u00e7l\u00fc ve esnek bir y\u00f6nlendirme sistemi bulunur. HTTP metotlar\u0131na (GET, POST, PUT, DELETE vb.) g\u00f6re veya URL desenlerine g\u00f6re rotalar tan\u0131mlayabilirsiniz.<\/p>\n<pre><code class=\"language-php\">\/\/ Basit bir GET rotas\u0131\n$f3->route('GET \/hakkimizda', function() {\n    echo 'Bu bizim hakk\u0131m\u0131zda sayfam\u0131z.';\n});\n\n\/\/ Dinamik parametreli rota\n$f3->route('GET \/kullanici\/@id', function($f3, $params) {\n    echo 'Kullan\u0131c\u0131 ID: ' . $params['id'];\n});\n\n\/\/ \u00c7oklu HTTP metotlar\u0131 i\u00e7in rota\n$f3->route('GET|POST \/iletisim', function($f3) {\n    if ($f3->get('VERB') == 'GET') {\n        echo '\u0130leti\u015fim formunu g\u00f6ster.';\n    } else {\n        echo '\u0130leti\u015fim formunu i\u015fle.';\n        \/\/ Form verilerine $f3->get('POST.alan_adi') ile eri\u015filebilir.\n    }\n});\n\n\/\/ Rota takma ad\u0131 (aliasing)\n$f3->route('GET @ana_sayfa: \/', function() {\n    echo 'Ana Sayfa';\n});\n\/\/ Ba\u015fka bir yerden y\u00f6nlendirme: $f3->reroute('@ana_sayfa');<\/code><\/pre>\n<h3>2. De\u011fi\u015fken Y\u00f6netimi<\/h3>\n<p>F3, uygulaman\u0131z genelinde de\u011fi\u015fkenleri ayarlamak ve almak i\u00e7in basit bir mekanizma sunar. Bu, yap\u0131land\u0131rma ayarlar\u0131, oturum verileri veya ge\u00e7ici bilgileri depolamak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-php\">\/\/ De\u011fi\u015fken ayarla\n$f3->set('site_adi', 'Benim F3 Sitem');\n$f3->set('veritabani.host', 'localhost');\n$f3->set('kullanici.adi', 'Ahmet');\n$f3->set('kullanici.email', 'ahmet@example.com');\n\n\/\/ De\u011fi\u015fkeni al\necho $f3->get('site_adi'); \/\/ \u00c7\u0131kt\u0131: Benim F3 Sitem\necho $f3->get('veritabani.host'); \/\/ \u00c7\u0131kt\u0131: localhost\n\n\/\/ T\u00fcm kullan\u0131c\u0131 bilgilerini al (dizi olarak)\n$kullanici = $f3->get('kullanici');\nprint_r($kullanici); \n\/* \u00c7\u0131kt\u0131:\nArray\n(\n    [adi] => Ahmet\n    [email] => ahmet@example.com\n)\n*\/<\/code><\/pre>\n<h3>3. \u015eablon Motoru (Templating)<\/h3>\n<p>F3&#8217;\u00fcn dahili \u015fablon motoru, HTML kodunuzu PHP mant\u0131\u011f\u0131ndan ay\u0131rman\u0131za yard\u0131mc\u0131 olur. Bu, daha temiz ve s\u00fcrd\u00fcr\u00fclebilir bir kod yap\u0131s\u0131 sa\u011flar.<\/p>\n<p>\u00d6nce <code>templates<\/code> ad\u0131nda bir dizin olu\u015fturun ve i\u00e7ine <code>anasayfa.html<\/code> ad\u0131nda bir dosya ekleyin:<\/p>\n<pre><code class=\"language-html\"><!-- templates\/anasayfa.html -->\n<!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>{{ @site_adi }}<\/title>\n<\/head>\n<body>\n    <h1>Ho\u015f Geldiniz, {{ @kullanici_adi }}!<\/h1>\n    <p>Bug\u00fcn\u00fcn tarihi: {{ date('Y-m-d') }}<\/p>\n<\/body>\n<\/html><\/code><\/pre>\n<p>\u015eimdi <code>index.php<\/code> dosyan\u0131zda bu \u015fablonu nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 g\u00f6relim:<\/p>\n<pre><code class=\"language-php\">\/\/ index.php i\u00e7inde\n$f3->set('site_adi', 'F3 Uygulamam');\n$f3->set('kullanici_adi', 'Ziyaret\u00e7i');\n\n\/\/ \u015eablon dizinini ayarla\n$f3->set('UI', 'templates\/');\n\n$f3->route('GET \/', function($f3) {\n    echo \\Template::instance()->render('anasayfa.html');\n});<\/code><\/pre>\n<p><code>{{ @degisken_adi }}<\/code> syntax&#8217;\u0131 ile F3 de\u011fi\u015fkenlerine eri\u015febilir, ayr\u0131ca basit PHP fonksiyonlar\u0131n\u0131 da do\u011frudan \u015fablon i\u00e7inde kullanabilirsiniz.<\/p>\n<h3>4. Veritaban\u0131 Entegrasyonu<\/h3>\n<p>F3, SQL (MySQL, PostgreSQL, SQLite, MS-SQL vb.) ve NoSQL (MongoDB, Redis, Apache Cassandra) veritabanlar\u0131 i\u00e7in soyutlama katmanlar\u0131 sunar. En yayg\u0131n olan\u0131 <code>DB\\SQL<\/code> ile bir MySQL veritaban\u0131na ba\u011flanmay\u0131 inceleyelim.<\/p>\n<pre><code class=\"language-php\">\/\/ index.php i\u00e7inde\n$f3->set('DB', [\n    'dsn' => 'mysql:host=localhost;port=3306;dbname=test_db',\n    'username' => 'root',\n    'password' => 'your_password'\n]);\n\n$f3->route('GET \/urunler', function($f3) {\n    \/\/ Veritaban\u0131 ba\u011flant\u0131s\u0131 olu\u015ftur\n    $db = new \\DB\\SQL($f3->get('DB.dsn'), $f3->get('DB.username'), $f3->get('DB.password'));\n\n    \/\/ Bir sorgu \u00e7al\u0131\u015ft\u0131r\n    $urunler = $db->exec('SELECT id, ad, fiyat FROM urunler');\n\n    \/\/ Sonu\u00e7lar\u0131 ekrana bas\n    echo '<h2>\u00dcr\u00fcnler<\/h2>';\n    echo '<ul>';\n    foreach ($urunler as $urun) {\n        echo '<li>' . $urun['ad'] . ' - ' . $urun['fiyat'] . ' TL<\/li>';\n    }\n    echo '<\/ul>';\n});<\/code><\/pre>\n<p><code>DB\\SQL<\/code> s\u0131n\u0131f\u0131n\u0131 kullanarak PDO tabanl\u0131 veritaban\u0131 i\u015flemlerini kolayca ger\u00e7ekle\u015ftirebilirsiniz. Ayr\u0131ca, F3&#8217;\u00fcn ORM benzeri bir yakla\u015f\u0131m sunan <code>DB\\SQL\\Mapper<\/code> s\u0131n\u0131f\u0131 ile nesne tabanl\u0131 veritaban\u0131 i\u015flemleri de yapabilirsiniz.<\/p>\n<h3>5. Oturum (Session) Y\u00f6netimi<\/h3>\n<p>F3, oturumlar\u0131 y\u00f6netmek i\u00e7in basit bir aray\u00fcz sa\u011flar. Varsay\u0131lan olarak PHP&#8217;nin yerle\u015fik oturumlar\u0131n\u0131 kullan\u0131r, ancak veritaban\u0131 veya Redis gibi farkl\u0131 depolama se\u00e7enekleriyle de yap\u0131land\u0131r\u0131labilir.<\/p>\n<pre><code class=\"language-php\">\/\/ index.php i\u00e7inde\n\/\/ Oturumu ba\u015flat\n$f3->set('AUTOLOAD', 'app\/'); \/\/ Oturum s\u0131n\u0131f\u0131 app\/Session.php i\u00e7inde olabilir\n$f3->set('SESSION.handler', 'Session'); \/\/ Varsay\u0131lan\u0131 kullan\u0131yorsan\u0131z bu sat\u0131ra gerek yok\n\n\/\/ Bir rotada oturum verisi ayarla\n$f3->route('GET \/login', function($f3) {\n    $f3->set('SESSION.kullanici_id', 123);\n    $f3->set('SESSION.kullanici_adi', 'Deniz');\n    echo 'Giri\u015f yap\u0131ld\u0131. Oturum verileri ayarland\u0131.';\n});\n\n\/\/ Ba\u015fka bir rotada oturum verisine eri\u015f\n$f3->route('GET \/profil', function($f3) {\n    if ($f3->exists('SESSION.kullanici_id')) {\n        echo 'Ho\u015f geldin, ' . $f3->get('SESSION.kullanici_adi') . '! ID: ' . $f3->get('SESSION.kullanici_id');\n    } else {\n        echo 'L\u00fctfen giri\u015f yap\u0131n.';\n    }\n});\n\n\/\/ Oturumu kapat\n$f3->route('GET \/logout', function($f3) {\n    $f3->clear('SESSION'); \/\/ T\u00fcm oturum verilerini sil\n    echo '\u00c7\u0131k\u0131\u015f yap\u0131ld\u0131.';\n});<\/code><\/pre>\n<h3>6. Hata Y\u00f6netimi<\/h3>\n<p>F3, hata ve istisna y\u00f6netimini kolayla\u015ft\u0131rmak i\u00e7in basit bir mekanizma sunar. <code>DEBUG<\/code> seviyesini ayarlayarak hata mesajlar\u0131n\u0131n nas\u0131l g\u00f6sterilece\u011fini kontrol edebilirsiniz.<\/p>\n<pre><code class=\"language-php\">\/\/ index.php i\u00e7inde\n\/\/ Hata ay\u0131klama seviyesi:\n\/\/ 0: Hata raporlama kapal\u0131 (\u00fcretim i\u00e7in)\n\/\/ 1: Minimal hata raporlama\n\/\/ 2: Detayl\u0131 hata raporlama\n\/\/ 3: Geli\u015ftirme i\u00e7in en detayl\u0131 raporlama\n$f3->set('DEBUG', 3); \n\n\/\/ \u00d6zel bir hata sayfas\u0131 tan\u0131mlama\n$f3->set('ONERROR', function($f3) {\n    \/\/ HTTP durum kodunu al\n    $kod = $f3->get('ERROR.code');\n    \n    \/\/ Hata mesaj\u0131n\u0131 al\n    $mesaj = $f3->get('ERROR.text');\n\n    \/\/ \u00d6zel bir \u015fablon render et\n    echo \\Template::instance()->render('hata.html');\n\n    \/\/ \u00d6rnek: Hata detaylar\u0131n\u0131 logla\n    error_log(\"Hata Kodu: $kod, Mesaj: $mesaj\");\n});<\/code><\/pre>\n<p><code>hata.html<\/code> \u015fablonunda <code>{{ @ERROR.code }}<\/code> ve <code>{{ @ERROR.text }}<\/code> gibi de\u011fi\u015fkenleri kullanarak hata bilgilerini g\u00f6sterebilirsiniz.<\/p>\n<hr>\n<h2>\u0130leri Seviye Kullan\u0131m ve En \u0130yi Pratikler<\/h2>\n<p>F3&#8217;\u00fcn temel \u00f6zelliklerini \u00f6\u011frendikten sonra, daha karma\u015f\u0131k uygulamalar geli\u015ftirmek i\u00e7in baz\u0131 ileri seviye konulara ve en iyi pratiklere g\u00f6z atal\u0131m.<\/p>\n<h3>1. Uygulama Yap\u0131land\u0131rmas\u0131 (Configuration)<\/h3>\n<p>Uygulama ayarlar\u0131n\u0131z\u0131 (veritaban\u0131 bilgileri, API anahtarlar\u0131 vb.) ayr\u0131 bir dosyada tutmak iyi bir pratiktir. F3, <code>config()<\/code> metodunu kullanarak INI dosyalar\u0131ndan yap\u0131land\u0131rma y\u00fcklemeyi destekler.<\/p>\n<p>Projenizin k\u00f6k dizininde <code>config.ini<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-ini\">\n[globals]\nDEBUG=3\nUI=templates\/\nAUTOLOAD=app\/\n\n[database]\nDB_DSN=\"mysql:host=localhost;port=3306;dbname=my_app_db\"\nDB_USERNAME=\"root\"\nDB_PASSWORD=\"your_password\"\n\n[app]\nAPP_NAME=\"Benim Harika Uygulamam\"\nAPI_KEY=\"supersecretkey\"\n<\/code><\/pre>\n<p>\u015eimdi <code>index.php<\/code> dosyan\u0131zda bu ayarlar\u0131 y\u00fckleyebilirsiniz:<\/p>\n<pre><code class=\"language-php\">\/\/ index.php i\u00e7inde\n$f3 = \\Base::instance();\n\n\/\/ config.ini dosyas\u0131n\u0131 y\u00fckle\n$f3->config('config.ini');\n\n\/\/ Ayarlara eri\u015fim\necho $f3->get('APP_NAME'); \/\/ \u00c7\u0131kt\u0131: Benim Harika Uygulamam\necho $f3->get('DB_DSN'); \/\/ \u00c7\u0131kt\u0131: mysql:host=localhost;port=3306;dbname=my_app_db<\/code><\/pre>\n<p>Bu y\u00f6ntem, farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) i\u00e7in farkl\u0131 yap\u0131land\u0131rma dosyalar\u0131 kullanman\u0131za olanak tan\u0131r.<\/p>\n<h3>2. Proje Yap\u0131s\u0131 \u00d6nerileri<\/h3>\n<p>F3 sizi kat\u0131 bir yap\u0131ya zorlamasa da, b\u00fcy\u00fck projelerde d\u00fczenli bir yap\u0131land\u0131rma s\u00fcrd\u00fcr\u00fclebilirli\u011fi art\u0131r\u0131r. \u0130\u015fte \u00f6rnek bir yap\u0131:<\/p>\n<pre><code>\n\/\n\u251c\u2500\u2500 index.php         (Ana giri\u015f dosyas\u0131)\n\u251c\u2500\u2500 .htaccess         (URL y\u00f6nlendirme)\n\u251c\u2500\u2500 config.ini        (Uygulama ayarlar\u0131)\n\u251c\u2500\u2500 templates\/        (HTML \u015fablonlar\u0131)\n\u2502   \u251c\u2500\u2500 layout.html\n\u2502   \u251c\u2500\u2500 home.html\n\u2502   \u2514\u2500\u2500 error.html\n\u251c\u2500\u2500 app\/              (Uygulama mant\u0131\u011f\u0131)\n\u2502   \u251c\u2500\u2500 controllers\/  (Kontrolc\u00fc s\u0131n\u0131flar\u0131)\n\u2502   \u2502   \u251c\u2500\u2500 HomeController.php\n\u2502   \u2502   \u2514\u2500\u2500 UserController.php\n\u2502   \u251c\u2500\u2500 models\/       (Model s\u0131n\u0131flar\u0131, veritaban\u0131 etkile\u015fimleri)\n\u2502   \u2502   \u251c\u2500\u2500 User.php\n\u2502   \u2502   \u2514\u2500\u2500 Product.php\n\u2502   \u2514\u2500\u2500 services\/     (Yard\u0131mc\u0131 s\u0131n\u0131flar, i\u015f mant\u0131\u011f\u0131)\n\u2502       \u2514\u2500\u2500 AuthService.php\n\u251c\u2500\u2500 public\/           (Herkese a\u00e7\u0131k dosyalar: CSS, JS, resimler)\n\u2502   \u251c\u2500\u2500 css\/\n\u2502   \u251c\u2500\u2500 js\/\n\u2502   \u2514\u2500\u2500 img\/\n\u2514\u2500\u2500 vendor\/           (Composer ile y\u00fcklenen k\u00fct\u00fcphaneler)\n<\/code><\/pre>\n<p>Bu yap\u0131da, <code>app\/controllers<\/code>, <code>app\/models<\/code> gibi dizinleri <code>AUTOLOAD<\/code> ayar\u0131na ekleyerek F3&#8217;\u00fcn bu s\u0131n\u0131flar\u0131 otomatik olarak y\u00fcklemesini sa\u011flayabilirsiniz:<\/p>\n<pre><code class=\"language-php\">$f3->set('AUTOLOAD', 'app\/controllers\/;app\/models\/;app\/services\/');<\/code><\/pre>\n<h3>3. Kontrolc\u00fcler (Controllers)<\/h3>\n<p>Rotlama mant\u0131\u011f\u0131n\u0131z\u0131 fonksiyonlar yerine s\u0131n\u0131flara ta\u015f\u0131mak, kodunuzu daha mod\u00fcler ve test edilebilir hale getirir. Her s\u0131n\u0131f bir veya daha fazla rota i\u00e7in i\u015f mant\u0131\u011f\u0131n\u0131 bar\u0131nd\u0131r\u0131r.<\/p>\n<p><code>app\/controllers\/HomeController.php<\/code>:<\/p>\n<pre><code class=\"language-php\"><?php\n\nnamespace App\\Controllers;\n\nclass HomeController {\n    public function index($f3) {\n        $f3->set('baslik', 'Ana Sayfa');\n        $f3->set('mesaj', 'F3 ile harika \u015feyler yap\u0131n!');\n        echo \\Template::instance()->render('home.html');\n    }\n\n    public function about($f3) {\n        echo 'Bu bizim hakk\u0131m\u0131zda sayfam\u0131z.';\n    }\n}<\/code><\/pre>\n<p><code>index.php<\/code> i\u00e7inde rotalar\u0131 bu kontrolc\u00fclere y\u00f6nlendirin:<\/p>\n<pre><code class=\"language-php\">\/\/ index.php i\u00e7inde\n$f3->set('AUTOLOAD', 'app\/controllers\/'); \/\/ Kontrolc\u00fcleri otomatik y\u00fckle\n\n$f3->route('GET \/', '\\App\\Controllers\\HomeController->index');\n$f3->route('GET \/hakkimizda', '\\App\\Controllers\\HomeController->about');<\/code><\/pre>\n<h3>4. Middleware (Ara Katman Yaz\u0131l\u0131m\u0131)<\/h3>\n<p>F3, belirli rotalar \u00e7al\u0131\u015fmadan \u00f6nce veya sonra kod \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131yan bir &#8220;middleware&#8221; benzeri mekanizma sunar. Bu, kimlik do\u011frulama, yetkilendirme, loglama veya \u00f6nbellekleme gibi i\u015flemler i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-php\">\/\/ index.php i\u00e7inde\n\/\/ Bir rota \u00e7al\u0131\u015fmadan \u00f6nce \u00e7al\u0131\u015facak bir middleware tan\u0131mla\n$f3->route('GET \/admin\/*', function($f3) {\n    \/\/ Kullan\u0131c\u0131n\u0131n oturum a\u00e7\u0131p a\u00e7mad\u0131\u011f\u0131n\u0131 kontrol et\n    if (!$f3->exists('SESSION.admin_logged_in')) {\n        $f3->reroute('\/login'); \/\/ Giri\u015f sayfas\u0131na y\u00f6nlendir\n    }\n});\n\n\/\/ Admin rotas\u0131\n$f3->route('GET \/admin\/dashboard', function() {\n    echo 'Admin Paneli Ho\u015f Geldiniz!';\n});<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>\/admin\/<\/code> ile ba\u015flayan t\u00fcm rotalara eri\u015fmeden \u00f6nce kullan\u0131c\u0131n\u0131n oturum a\u00e7m\u0131\u015f olup olmad\u0131\u011f\u0131 kontrol edilir. E\u011fer oturum a\u00e7mam\u0131\u015fsa, kullan\u0131c\u0131 <code>\/login<\/code> sayfas\u0131na y\u00f6nlendirilir.<\/p>\n<hr>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<p>Fat-Free Framework, PHP geli\u015ftiricileri i\u00e7in minimalist, h\u0131zl\u0131 ve esnek bir se\u00e7enek sunar. Hafif yap\u0131s\u0131 sayesinde, \u00f6\u011frenme e\u011frisi d\u00fc\u015f\u00fckt\u00fcr ve k\u00fc\u00e7\u00fckten orta \u00f6l\u00e7e\u011fe kadar bir\u00e7ok farkl\u0131 proje t\u00fcr\u00fc i\u00e7in idealdir. API geli\u015ftirme, h\u0131zl\u0131 prototipleme veya performans\u0131 \u00f6n planda tutan uygulamalar i\u00e7in F3, gereksiz karma\u015f\u0131kl\u0131ktan ka\u00e7\u0131narak temel ihtiya\u00e7lar\u0131 kar\u015f\u0131lar.<\/p>\n<p>Bu rehberde, F3&#8217;\u00fcn kurulumundan ba\u015flayarak, y\u00f6nlendirme, de\u011fi\u015fken y\u00f6netimi, \u015fablon motoru, veritaban\u0131 entegrasyonu, oturumlar ve hata y\u00f6netimi gibi temel \u00f6zelliklerini ele ald\u0131k. Ayr\u0131ca, yap\u0131land\u0131rma, proje yap\u0131s\u0131, kontrolc\u00fcler ve middleware gibi ileri seviye konulara de\u011finerek daha d\u00fczenli ve \u00f6l\u00e7eklenebilir uygulamalar geli\u015ftirmenize yard\u0131mc\u0131 olacak pratik bilgiler sunduk. F3&#8217;\u00fcn sundu\u011fu esneklik ve performans, onu PHP ara\u00e7 kutunuzda de\u011ferli bir yere koyar.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>1. Fat-Free Framework hangi t\u00fcr projeler i\u00e7in idealdir?<\/strong><br \/>\nF3, API&#8217;ler, mikro servisler, k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli web uygulamalar\u0131, h\u0131zl\u0131 prototipleme projeleri ve performans\u0131 y\u00fcksek tutulmas\u0131 gereken uygulamalar i\u00e7in olduk\u00e7a uygundur. B\u00fcy\u00fck \u00f6l\u00e7ekli, kurumsal d\u00fczeyde projeler i\u00e7in daha kapsaml\u0131 framework&#8217;ler (Laravel, Symfony) daha fazla \u00f6zellik ve yap\u0131 sunabilir, ancak F3 do\u011fru kullan\u0131ld\u0131\u011f\u0131nda bu t\u00fcr projelerde de esneklik sa\u011flayabilir.<\/p>\n<p><strong>2. F3, di\u011fer pop\u00fcler PHP framework&#8217;lerinden (Laravel, Symfony) fark\u0131 nedir?<\/strong><br \/>\nF3, &#8220;mikro framework&#8221; kategorisine girer. Laravel veya Symfony gibi &#8220;full-stack&#8221; framework&#8217;lere g\u00f6re \u00e7ok daha hafiftir, daha az ba\u011f\u0131ml\u0131l\u0131\u011fa sahiptir ve daha az &#8220;magic&#8221; i\u00e7erir. Bu, daha h\u0131zl\u0131 y\u00fckleme s\u00fcreleri ve daha d\u00fc\u015f\u00fck kaynak t\u00fcketimi anlam\u0131na gelir. Ancak, daha az yerle\u015fik \u00f6zellik (\u00f6rne\u011fin, tam te\u015fekk\u00fcll\u00fc ORM veya kimlik do\u011frulama sistemi) sunar, bu da geli\u015ftiricinin baz\u0131 bile\u015fenleri manuel olarak entegre etmesini gerektirebilir.<\/p>\n<p><strong>3. F3, MVC (Model-View-Controller) yap\u0131s\u0131n\u0131 destekler mi?<\/strong><br \/>\nEvet, F3 MVC prensiplerini destekler ve uygulaman\u0131z\u0131 bu mimariye g\u00f6re tasarlaman\u0131za olanak tan\u0131r. Ancak, sizi kat\u0131 bir MVC yap\u0131s\u0131na zorlamaz. \u0130sterseniz daha basit, tek dosya tabanl\u0131 bir yap\u0131 da kullanabilirsiniz. Bu esneklik, projenizin ihtiya\u00e7lar\u0131na g\u00f6re karar vermenizi sa\u011flar.<\/p>\n<p><strong>4. Fat-Free Framework&#8217;\u00fcn performans\u0131 nas\u0131l?<\/strong><br \/>\nAd\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, F3 performansa odaklanm\u0131\u015ft\u0131r. D\u00fc\u015f\u00fck bellek kullan\u0131m\u0131, minimal dosya boyutu ve h\u0131zl\u0131 y\u00fckleme s\u00fcreleri sunar. Bu, \u00f6zellikle y\u00fcksek trafikli uygulamalar veya kaynaklar\u0131 k\u0131s\u0131tl\u0131 sunucularda \u00e7al\u0131\u015fan projeler i\u00e7in \u00f6nemli bir avantajd\u0131r.<\/p>\n<p><strong>5. \u00d6\u011frenmesi kolay m\u0131?<\/strong><br \/>\nEvet, F3&#8217;\u00fcn \u00f6\u011frenme e\u011frisi olduk\u00e7a d\u00fc\u015f\u00fckt\u00fcr. Basit API&#8217;si ve iyi belgelendirilmi\u015f yap\u0131s\u0131 sayesinde, temel PHP bilgisine sahip geli\u015ftiriciler k\u0131sa s\u00fcrede F3 ile uygulama geli\u015ftirmeye ba\u015flayabilirler. Karma\u015f\u0131k konfig\u00fcrasyonlar veya derinlemesine kavramlar yerine, do\u011frudan kod yazmaya odaklanabilirsiniz.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"PHP ekosisteminde bir\u00e7ok farkl\u0131 framework bulunmaktad\u0131r ve her biri belirli ihtiya\u00e7lara y\u00f6nelik \u00e7\u00f6z\u00fcmler sunar. Bu \u00e7e\u015fitlilik i\u00e7inde, haf","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-31662","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Fat-Free Framework Nedir? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fat-Free Framework Nedir?\" \/>\n<meta property=\"og:description\" content=\"PHP ekosisteminde bir\u00e7ok farkl\u0131 framework bulunmaktad\u0131r ve her biri belirli ihtiya\u00e7lara y\u00f6nelik \u00e7\u00f6z\u00fcmler sunar. Bu \u00e7e\u015fitlilik i\u00e7inde, haf\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-12T09:42:00+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Fat-Free Framework Nedir?\",\"datePublished\":\"2025-10-12T09:42:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/\"},\"wordCount\":1706,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/\",\"name\":\"Fat-Free Framework Nedir? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-12T09:42:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fat-Free Framework Nedir?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Fat-Free Framework Nedir? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/","og_locale":"tr_TR","og_type":"article","og_title":"Fat-Free Framework Nedir?","og_description":"PHP ekosisteminde bir\u00e7ok farkl\u0131 framework bulunmaktad\u0131r ve her biri belirli ihtiya\u00e7lara y\u00f6nelik \u00e7\u00f6z\u00fcmler sunar. Bu \u00e7e\u015fitlilik i\u00e7inde, haf","og_url":"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-12T09:42:00+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"10 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Fat-Free Framework Nedir?","datePublished":"2025-10-12T09:42:00+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/"},"wordCount":1706,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/","url":"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/","name":"Fat-Free Framework Nedir? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-12T09:42:00+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/fat-free-framework-nedir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Fat-Free Framework Nedir?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31662","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31662"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31662\/revisions"}],"predecessor-version":[{"id":31663,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31662\/revisions\/31663"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31662"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31662"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31662"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}