Yönlendirme (Routing)

Yabasi'nin güçlü yönlendirme sistemi ile temiz ve sürdürülebilir URL yapıları oluşturun

URL Eşleme
Rota Grupları
Middleware Desteği

Temel Yönlendirme

Yabasi'deki en temel rotalar, bir URI ve bir callback fonksiyonu kabul eder. Rotalarınızı routes/web.php dosyasında tanımlayabilirsiniz:

routes/web.php
use Yabasi\Routing\Router;

$router->get('/greeting', function () {
    return 'Hello, World!';
});

$router->get('/users/{id}', function ($id) {
    return "User ID: " . $id;
});

Rota parametreleri otomatik olarak callback fonksiyonuna enjekte edilir.

HTTP Metodları

Kullanılabilir Router Metodları

Router, tüm yaygın HTTP metodlarını destekler. Her metod bir URI ve bir işleyici (handler) bekler:

HTTP Method Examples
// Basic route definitions
$router->get('/users', function () {
    return 'List all users';
});

$router->post('/users', function () {
    return 'Create new user';
});

$router->put('/users/{id}', function ($id) {
    return "Update user: $id";
});

$router->delete('/users/{id}', function ($id) {
    return "Delete user: $id";
});

HTTP Metodları Hızlı Başvuru

GET Kaynak görüntüleme
POST Yeni kaynak oluşturma
PUT Kaynağı güncelleme
PATCH Kısmi güncelleme
DELETE Kaynak silme
OPTIONS Kullanılabilir metodlar

Controller ile Yönlendirme

Callback fonksiyonları yerine, controller sınıflarındaki metodlara yönlendirme yapabilirsiniz:

Controller Route Examples
// UserController routes
$router->get('/users', 'UserController@index');
$router->post('/users', 'UserController@store');
$router->get('/users/{id}', 'UserController@show');
$router->put('/users/{id}', 'UserController@update');
$router->delete('/users/{id}', 'UserController@destroy');

Controller metodları, rota parametrelerini URL'deki sırayla alır.

Rota Grupları

Temel Gruplama

Rota grupları, birden fazla rotada ortak özellikleri (middleware, prefix vb.) paylaşmanızı sağlar:

Route Groups Example
// Basic middleware group
$router->group(['middleware' => ['auth']], function ($router) {
    $router->get('/dashboard', 'DashboardController@index');
    $router->get('/profile', 'ProfileController@show');
});

// Prefix and middleware combination
$router->group([
    'prefix' => 'admin',
    'middleware' => ['auth', 'admin']
], function ($router) {
    $router->get('/users', 'AdminController@users');
    $router->get('/settings', 'AdminController@settings');
});

Gruplar iç içe kullanılabilir ve özellikler otomatik olarak birleştirilir.

Grup Özellikleri

Middleware

$router->group(['middleware' => ['auth']], function ($router) {
    // Protected routes
});

Gruba ait tüm rotalara middleware uygular.

Prefix

$router->group(['prefix' => 'api'], function ($router) {
    // /api/... routes
});

Tüm rotalara ortak bir ön ek ekler.

İç İçe Gruplar

Grupları iç içe kullanarak karmaşık rota yapıları oluşturabilirsiniz:

Nested Groups Example
$router->group(['middleware' => ['auth']], function ($router) {
    // Authenticated routes
    
    $router->group(['prefix' => 'admin'], function ($router) {
        // Admin routes
        
        $router->group(['middleware' => ['role:super-admin']], function ($router) {
            // Super admin routes
            $router->get('/system', 'AdminController@system');
            $router->get('/logs', 'AdminController@logs');
        });
    });
});

Dikkat Edilmesi Gereken

Grup yapılarını fazla karmaşık hale getirmekten kaçının.

İyi Pratik

Gruplama mantığını modüler ve anlaşılır tutun.

Rota Parametreleri

Temel Parametreler

URL'lerden dinamik değerleri yakalamak için rota parametrelerini kullanabilirsiniz:

Basic Parameters
// Single parameter
$router->get('/posts/{id}', function ($id) {
    return "Showing post: " . $id;
});

// Multiple parameters
$router->get('/posts/{post}/comments/{comment}', function ($postId, $commentId) {
    return "Post: $postId, Comment: $commentId";
});

Parametreler fonksiyona tanımlandıkları sırayla aktarılır.

Controller'larda Parametre Kullanımı

Controller metodlarında rota parametrelerini aynı şekilde kullanabilirsiniz:

// PostController.php
class PostController extends Controller
{
    public function show($id)
    {
        return Post::find($id);
    }
    
    public function showComment($postId, $commentId)
    {
        return Comment::where('post_id', $postId)
                     ->find($commentId);
    }
}

Form Method Spoofing

HTML formları doğrudan PUT, PATCH veya DELETE isteklerini desteklemez. Bu metodları kullanmak için method spoofing kullanmanız gerekir:

Form Method Spoofing Example
<form action="/posts/1" method="POST">
    <!-- Method Spoofing Field -->
    <input type="hidden" name="_method" value="PUT">
    
    <!-- CSRF Token -->
    {{ csrf_field()|raw }}
    
    <!-- Form Fields -->
    <input type="text" name="title">
    <textarea name="content"></textarea>
    
    <button type="submit">Update Post</button>
</form>

_method alanı, formun gerçek HTTP metodunu belirtir.

Desteklenen HTTP Metodları

PUT Kaynak güncelleme
PATCH Kısmi güncelleme
DELETE Kaynak silme

CSRF Koruması

Yabasi, uygulamanızı Cross-Site Request Forgery (CSRF) saldırılarına karşı otomatik olarak korur. Her form gönderiminde bir CSRF token'ı eklemeniz gerekir:

CSRF Protection Example
<form method="POST" action="/profile">
    <!-- Using the csrf_field helper -->
    {{ csrf_field()|raw }}
    
    <!-- Or manually -->
    <input type="hidden" name="_csrf_token" value="{{ csrf_token() }}">
    
    <!-- Form fields -->
</form>

Otomatik Doğrulama

Tüm POST, PUT, PATCH ve DELETE istekleri otomatik olarak CSRF token kontrolünden geçer.

AJAX İstekleri

// Add to AJAX headers
'X-CSRF-TOKEN': '{{ csrf_token() }}'

Önemli Güvenlik Notu

CSRF token'ı olmayan form gönderimleri otomatik olarak reddedilir ve 419 hatası döndürülür.

Sonraki Adımlar

Yönlendirme sistemini öğrendiniz, şimdi bu konularla devam edin:

API Geliştirme İpucu

API rotalarınızı /api prefix'i altında gruplamayı unutmayın.

Daha Fazla Bilgi

Detaylı örnekler ve ileri seviye kullanımlar için resmi Yabasi dokümantasyonunu inceleyin.

Find the documentation helpful?

Show your support by starring our project on GitHub

Star on GitHub