Routing

Titan Framework'te routing(yönlendirme) yapmak için /App/Config dizininde bulunan Routes.php dosyası kullanılır.

  1. Routing İşlemleri
  2. Routing Methodları
  3. Controller@Method Çalıştırma
  4. Routing Parametreleri
  5. Routing Gruplama
  6. Namespace Tanımlama
  7. Middleware Tanımlama
  8. Domain Tanımlama
  9. IP Tanımlama
  10. SSL Dayatma
  11. Rota İsimlendirme

Routing İşlemleri

Titan Framework'te basit routing işlemi, http isteğine göre belirlenen methoda, uri ve callback parametrelerini göndererek yapılır.

Route::get('/', function(){
	echo 'hello world!';
});

Routing Methodları

Routing işlemleri, HTTP request methodlarına göre yapılandırılır;

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Route::patch($uri, $callback);
Route::head($uri, $callback);

Birden fazla HTTP request methodu için de route tanımlanabilir. Bunun için Router nesnesinin match methodu kullanılır.

Route::match(['get', 'post'], $uri, function() {
	//
});

Controller@Method Çalıştırma

Bir controller'ın istenen bir methodunu çalıştıracak şekilde route tanımlaması yapılabilir.

Route::get('/', 'Home@index');

Routing Parametreleri

Routing tanımlarken, çalıştırılacak callback fonksiyonuna ya da controller'daki methoda parametre gönderilebilir. Oluşturulan rotaya eklenecek parametrelere, where() methodu ile reqular expression(düzenli ifade) tanımlanabilir.

Route::get('/blog/{categoryId}/post/{postId}', function($categoryId, $postId) {
	echo 'Kategori #' . $categoryId . ', Makale #' . $postId;
})->where(['categoryId' => '(\d+)', 'postId' => '(\d+)']);

Route::get('/blog/{postId}', 'Blog@post')->where(['postId' => '(\d+)']);

Route::get('/user/{name}', function($name) {
	echo 'Merhaba ' . $name;
})->where(['name' => '([A-Za-z]+)'])

Routing Gruplama

Titan Framework, birbiriyle ilişkili olan rotaların gruplanmasına imkan tanır. Böylece aynı url segmenti için birden fazla rota yazmanın önüne geçilmiştir.

Route::prefix('frontend')->group(function(){
	Route::get('/', 'Home@index'); // "/frontend"
	Route::get('/home', 'Home@index'); // "/frontend/home"
	Route::get('/blog', 'Blog@posts'); // "/frontend/blog"
});

Route::prefix('backend')->group(function(){
	Route::get('/', 'Dashboard@index'); // "/backend"
	Route::get('/dashboard', 'Dashboard@index'); // "/backend/dashboard"
	Route::get('/posts', 'Posts@index'); // "/backend/dashboard/posts"
});

Routing gruplamanın bir diğer avantajı da aynı namespace ya da middleware'ları kullanan sayfaların ortak bir rotada toplanabilmesidir. Bu sayede her bir rota için ayrı ayrı namespace ve middleware tanımlaması yapılmaz, sadece gruba tanımlanır.

Route::prefix('frontend')->namespace('frontend')->group(function(){
	Route::get('/', 'Home@index'); // Frontend root tanımı
	Route::get('/home', 'Home@index'); // Frontend home tanımı
	Route::get('/blog', 'Blog@posts'); // Frontend blog tanımı
});

Route::prefix('backend')->namespace('backend')->middleware(['auth'])->group(function(){
	Route::get('/', 'Dashboard@index'); // Backend root tanımı
	Route::get('/dashboard', 'Dashboard@index'); // Backend dashboard tanımı
	Route::get('/posts', 'Posts@index'); // Backend posts tanımı
});

Namespace Tanımlama

Her bir rota ve rota grubu için ayrıca namespace tanımı yapılabilir. Namespace tanımlanan rotalardaki callback methodunun bulunduğu controller'lar, bu namespace'de yer almalıdır.

Route::namespace('frontend')->group(function(){
	Route::get('/', 'Home@index'); // "App\Controllers\Frontend\Home@index"
});

Middleware Tanımlama

Her bir rota ve rota grubu için ayrıca middleware tanımı yapılabilir. Bu rotaların hedeflediği sayfalar çalıştırılmadan önce, tanımlanan middleware'lar çalıştırılır.

Aşağıda, yönetici paneline erişim için authentication kontrolü yapan örnek bir middleware tanımı görülmektedir;

Route::middleware(['auth'])->group(function(){
	Route::get('/dashboard', 'Dashboard@index');
});

Domain Tanımlama

Her bir rota ve rota grubu için ayrıca domain tanımı yapılabilir. Bu rotaların hedeflediği sayfalar yalnızca belirtilen domain altında çalıştırılır.

Route::domain('api.example.com')->namespace('api')->group(function(){
	Route::get('/', 'Home@index'); // "http://api.example.com/"
	Route::get('/login', 'Auth@login'); // "http://api.example.com/login"
});

IP Tanımlama

Her bir rota ve rota grubu için ayrıca ip kısıtlaması yapılabilir. Bu rotaların hedeflediği sayfalar yalnızca belirtilen ip adreslerinden gelen isteklere cevap verirler. Aksi durumda tüm istekler 404 hata sayfasına yönlendirilir.

Route::ip('192.168.1.35')->namespace('api')->group(function(){
	Route::get('/', 'Home@index'); // "http://api.example.com/"
	Route::get('/login', 'Auth@login'); // "http://api.example.com/login"
});

Route::ip(['192.168.1.35', '192.168.1.52'])->namespace('api')->group(function(){
	Route::get('/', 'Home@index'); // "http://api.example.com/"
	Route::get('/login', 'Auth@login'); // "http://api.example.com/login"
});

SSL Dayatma

Her bir rota ve rota grubu için ayrıca ssl dayatması yapılabilir. Bu rotaların hedeflediği sayfalar yalnızca ssl ile gelen güvenli isteklere cevap verirler. Aksi durumda tüm istekler 404 hata sayfasına yönlendirilir.

Route::ssl()->namespace('api')->group(function(){
	Route::get('/', 'Home@index'); // "http://api.example.com/"
	Route::get('/login', 'Auth@login'); // "http://api.example.com/login"
});

Rota İsimlendirme

Her bir rota için isimlendirme yapılabilir. Oluşturulan bir rotaya tanımlanan isim, route() fonksiyonuna parametre olarak verildiğinde, ilgili rotanın url adresine ulaşılacaktır.

Route::get('/', 'Home@index')->name('homepage');
Route::post('/user', 'Contact@send')->name('contact');