BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > Bgmvc > index.php dosyası

index.php dosyası

Projemizde web tarayıcı satırından girilen değer ne olursa olsun, tüm akışlar ana dizinde bulunan ve içeriği aşağıda gösterilen index.php dosyasına yönlendirilecektir.

C:\wamp\www\bgmvc\index.php


<?php 
session_start(); // Oturum başlatma

// Sınıfı kullanımları
use \Core\{Config, Router, H};
use App\Models\Users;
use Dotenv\Dotenv;

// Sabit bildirimleri
define('FROOT', __DIR__); // Fiziksel dosya yol tanımlaması (C:\wamp\www\bgmvc)
define('DS', DIRECTORY_SEPARATOR);

// Composer tarafından yüklenen bileşenleri otomatik olarak yükleme
require_once('./vendor/autoload.php');

// Dotenv bileşeni oluşturma
$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->safeLoad();

// Otomatik sınıf dosyası yükleme fonksiyonu
spl_autoload_register(function($className){
    $parts = explode('\\', $className);
    $class = end($parts);
    array_pop($parts);
    $path = strtolower(implode(DS, $parts));
    $path = FROOT . DS . $path . DS . $class . '.php';
    if(file_exists($path)) {
       include($path);
    } 
});

// Kullanıcı bağlı ise kullanıcı bilgilerini içeren bir nesne, değilse false değeri geri döndürür.
$current_user = Users::get_current_user();

// Config.php dosyasındaki Config sınıfı içindeki get() fonksiyonu ile 
// ana dizinde bulunan env dosyasındaki root_dir değerini okuma
$root_dir = Config::get('root_dir'); // '/bgmvc/'

// Tanımlanan ROOT sabitine Lokal sunucu ise '/bgmvc/' değerini, uzak sunucu ise '/' değerini atar.
define('ROOT', ($_SERVER['SERVER_NAME']==='localhost') ? $root_dir : '/'); // Lokal='/bgmvc/' Live='/'

// Lokal sunucu ise '/bgmvc/' değerini, uzak sunucu ise '/' değerini URL değerinin başından siler.
// Lokal: '/bgmvc/' -> '', '/bgmvc/home' -> 'home' Live: '/' -> '' '/home' -> 'home'
$url = H::remove_root($_SERVER['REQUEST_URI']); 

// var_dump($url); die();

// İlk giriş ise sadece boş bir dizi, değilse denetleyici (controller), hareket (action) ve parametreler içerir.
$current_page = $url; // '', 'home', '/home/details/5', 'activities/software', 'about'

// '/' değeri ile ayrılmış olan denetleyici, hareket ve parametre değerleri bir diziye atanır. 
$url = explode ('/', $url); 

Router::route($url); // Router'a yönlendirme


// C:\wamp\www\bgmvc\core\H.php
public static function remove_root($url) {
	// '/bgmvc/' -> ''
	// '/bgmvc/home' -> 'home'
	// '/bgmvc/home/details/5' -> '/home/details/5'
	if(ROOT != '/') { // En soldaki '/bgmvc/' (Lokal sunucu) veya '/' (Uzak sunucu) değerini kaldırma
	   $url = str_replace(ROOT, '', $url);
	} 
	else { // '/' değerini kaldırma (Canlı sunucu) $url = '/' -> $url = ''
	   $url = ltrim($url, '/'); 
	}	

	// $url değerinin en sağında yer alabilecek id=21&md=34 gibi değerleri silmek için
	$url = preg_replace('/(\?.+)/', '', $url); 

	return $url;
}

index.php dosyasında sırayla aşağıdaki işlemler gerçekleştirilir:

  1. session_start() komutu ile oturum başlatılır.
  2. use komutları ile kullanılacak sınıflar dosyaya dahil edilir.
  3. define() fonksiyonu ile, dizin ayırıcı DS sabitine ve uygulamamızın fiziksel ana dizin yolu FROOT sabitine atanır.
  4. Composer tarafından yüklenen bileşenleri otomatik olarak yüklemek için autoload.php dosyası çalıştırılır.
  5. Dotenv bileşeni oluşturulur.
  6. Nesneye yönelik uygulamalarda, tanımladığımız her sınıf için bir dosya oluştururarak, bu dosyaları gerekli oldukları PHP dosyalarının başına include() veya require() fonksiyonları ile tek tek dahil etmek yerine, henüz tanımlanmamış bir sınıfı kullanmak istediğimizde otomatik olarak çağrılan spl_autoload_register() fonksiyonu ile, core, controllers ve models dizinleri altında bulunan ve içinde sınıf tanımlamalarının yapıldığı .php uzantılı dosyaları otomatik olarak tanımlamış oluruz.
  7. Users sınıfındaki get_current_user() ile $currentUser değişkenine, kullanıcı bağlı ise kullanıcı bilgilerini içeren bir nesne, değilse false değer atanır.
  8. Config.php dosyasındaki Config sınıfı içindeki get() fonksiyonu ile ana dizinde bulunan env dosyasındaki root_dir değeri $root_dir değişkenine atanır.
  9. define() fonksiyonu ile anımlanan ROOT sabitine lokal sunucu ise '/bgmvc/' değerini, uzak sunucu ise '/' değerini atar.
  10. H sınıfı içindeki remove_root() fonksiyonu çağrılarak, lokal sunucu ise '/bgmvc/' değerini, uzak sunucu ise '/' değerini URL değerinin başından siler.
    • Eğer ROOT sabiti '/' değerinden farklı ise (Lokal sunucu), '/bgmvc/' değeri $url ($_SERVER['REQUEST_URI']) değişken değerinin başlangıcından silinir. [] değerini alır. Değilse (Uzak sunucu), '/' değeri $url ($_SERVER['REQUEST_URI']) değişken değerinin başlangıcından silinir.
    • preg_replace() fonksiyonu ile $url değerinin en sağında yer alabilecek parametreler (id=21&md=34 gibi) silinir.

    Yerel sunucuda girilen farklı tarayıcı satır değerlerine göre, $url değişkeninin aldığı değerler aşağıda gösterilmektedir:

    http://localhost/bgmvc/ (Siteye ilk giriş)
    string '' (length=0)
    
    http://localhost/bgmvc/home (Sadece denetleyici)
    string 'home' (length=4)
      
    http://localhost/bgmvc/home/details/5 (Denetleyici, hareket ve tek bir parametre)
    string 'home/details/5' (length=14)
     	   
  11. $url değişkeninde bulunan istek yapılan sayfanın denetleyici, hareket ve parametre değerleri $current_page değişkenine aktarılır. (home/details/5)
  12. $url değişkeninde '/' değeri ile ayrılmış olan denetleyici, hareket ve parametre değerleri explode() fonksiyonu ile ayrılarak bir yine $url değişkenine bir dizi olarak atanır.

    Yerel sunucuda girilen farklı tarayıcı satır değerlerine göre, $url değişkeninin aldığı değerler aşağıda gösterilmektedir:

    http://localhost/bgmvc/ (Siteye ilk giriş)
    array (size=1)
      0 => string '' (length=0)
      
    http://localhost/bgmvc/home (Sadece denetleyici)
    array (size=1)
      0 => string 'home' (length=4) 
      
    http://localhost/bgmvc/home/details/5 (Denetleyici, hareket ve tek bir parametre)
    array (size=3)
      0 => string 'home' (length=4)
      1 => string 'details' (length=7)
      2 => string '5' (length=1)
     	   
  13. Router::route($url); satırı çalıştığında ise, spl_autoload_register() fonksiyonu ile yapılan otomatik sınıf yükleme nedeniyle, core dizini altında bulunan Router.php dosyası otomatik olarak yüklenerek içindeki sınıf tanımlaması uygulamamıza dahil edilir ve Router sınıfı içindeki route() fonksiyonu $url değişkeni ile çağrılır.