Routing
Titan Framework'te routing(yönlendirme) yapmak için /App/Config dizininde bulunan Routes.php dosyası kullanılır.
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');
route() fonksiyonu ve kullanımı ile ilgili detaylı bilgi için tıklayınız.