Yönlendirme (Route) - LARAVEL

Yönlendirme (Route) - LARAVEL

Yönlendirme

 

Temel Yönlendirme

En temel Laravel rotaları, yalnızca bir URI ve bir rota kabul eder Closure, rotaları tanımlamada çok basit ve etkileyici bir yöntem sunar:

Route::get('foo', function () {
    return 'Hello World';
});

Varsayılan Rota Dosyaları

Tüm Laravel rotaları, routesdizinde bulunan rota dosyalarınızda tanımlanır. Bu dosyalar çerçeve tarafından otomatik olarak yüklenir. Dosyanın web arayüzü içindir yolları tanımlar. Bu güzergahlara, oturum durumu ve CSRF koruması gibi özellikler sağlayan katman grubu atanır . İçindeki yollar statelessdir ve katman grubu grubuna tahsis edilmiştir.routes/web.phpwebroutes/api.phpapi

Çoğu uygulama için, dosyanızda rotalar tanımlayarak başlayacaksınız .routes/web.php

Kullanılabilir Yönlendirici Yöntemleri

Yöneltici herhangi bir HTTP fiiline yanıt veren rotaları kaydetmenize izin verir:

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

Bazen birden fazla HTTP fiiline yanıt veren bir rota kaydettirmeniz gerekebilir. matchYöntemi kullanarak bunu yapabilirsiniz. Ya da anyyöntemi kullanarak tüm HTTP fiillerine yanıt veren bir rota kaydedebilirsiniz :

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

Route::any('foo', function () {
    //
});

CSRF Koruması

Işaret eden HTML formları POSTPUTya DELETEtanımlanan yolları webyolları dosyasının bir CSRF belirteç alanını içermelidir. Aksi takdirde, talep reddedilecektir. CSRF koruması hakkında CSRF belgelerinde daha fazla bilgi bulabilirsiniz :

<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>

 

Rota Parametreleri

 

Gerekli Parametreler

Tabii ki, bazen rotanızdaki URI bölümlerini yakalamanız gerekir. Örneğin, URL'den bir kullanıcının kimliğini yakalamanız gerekebilir. Bunu, rota parametrelerini tanımlayarak yapabilirsiniz:

Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});

Rotanızın gerektirdiği sayıda rota parametresi tanımlayabilirsiniz:

Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});

Rota parametreleri daima parantez içine alınmış ve alfabetik karakterlerden oluşmalıdır. Rota parametreleri bir karakter içermeyebilir. Onun yerine alt çizgi ( ) kullanın.{}-_

 

İsteğe Bağlı Parametreler

Bazen bir rota parametresi belirlemeniz gerekebilir ancak bu rota parametresinin varlığını isteğe bağlı yapın. Bunu, ?parametre adının ardına bir işaret koyarak yapabilirsiniz. Rotanın karşılık gelen değişkene bir varsayılan değer verdiğinizden emin olun:

Route::get('user/{name?}', function ($name = null) {
    return $name;
});

Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});

 

Düzenli İfade Kısıtlamaları

whereBir rota örneği üzerindeki yöntemi kullanarak, rota parametrelerinin biçimini sınırlayabilirsiniz . whereYöntem parametresi ve parametre kısıtlı nasıl olması gerektiği tanımlayan bir düzenli ifade adını kabul eder:

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

Route::get('user/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

Route::get('user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

 

Küresel Sınırlamalar

Bir rota parametresinin belirli bir düzenli ifadeyle her zaman sınırlandırılmasını istiyorsanız, patternyöntemi kullanabilirsiniz . Bu kalıpları bootsizin yönteminizde tanımlamalısınız RouteServiceProvider:

/**
 * Define your route model bindings, pattern filters, etc.
 *
 * @return void
 */
public function boot()
{
    Route::pattern('id', '[0-9]+');

    parent::boot();
}

Desen tanımlandıktan sonra, o parametre adını kullanarak otomatik olarak tüm rotalara uygulanır:

Route::get('user/{id}', function ($id) {
    // Only executed if {id} is numeric...
});

 

Adlandırılmış Güzergahlar

Adlandırılmış yollar, URL'lerin uygun şekilde oluşturulmasını veya belirli rotalar için yeniden yönlendirmeler yapılmasını sağlar. nameYöntemi rota tanımına zincirleyerek bir rota için bir ad belirtebilirsiniz:

Route::get('user/profile', function () {
    //
})->name('profile');

Denetleyici eylemleri için rota adları da belirleyebilirsiniz:

Route::get('user/profile', 'UserController@showProfile')->name('profile');

Adlandırılmış Güzergahlara URL Oluşturma

Belirli bir rotaya bir ad atadıktan sonra, URL oluştururken veya genel routeişlev aracılığıyla yeniden yönlendirme yaparken rota adını kullanabilirsiniz :

// Generating URLs...
$url = route('profile');

// Generating Redirects...
return redirect()->route('profile');

Adlandırılmış yol parametreleri tanımlarsa, parametreleri ikinci argüman olarak routeişleve aktarabilirsiniz . Verilen parametreler otomatik olarak doğru konumlarına URL'ye eklenir:

Route::get('user/{id}/profile', function ($id) {
    //
})->name('profile');

$url = route('profile', ['id' => 1]);

 

Yol Grupları

Güzergah grupları, her bir güzergahta bu nitelikleri tanımlamaya gerek duymadan, çok katlı güzergahlarda ara katman veya ad alanları gibi güzergah özelliklerini paylaşmanıza olanak tanır. Paylaşılan nitelikler, yöntemin ilk parametresi olarak bir dizi biçiminde belirtilir .Route::group

 

Middleware

Bir grup içindeki tüm güzergahlara orta katman aygıtı atamak middlewareiçin grup niteliği dizisindeki tuşu kullanabilirsiniz. Middleware, dizide listelendikleri sırada yürütülür:

Route::group(['middleware' => 'auth'], function () {
    Route::get('/', function ()    {
        // Uses Auth Middleware
    });

    Route::get('user/profile', function () {
        // Uses Auth Middleware
    });
});

 

Ad Alanları

Güzergah grupları için bir diğer yaygın kullanım örneği, grup dizisindeki parametreyi kullanarak bir kontrolör grubuna aynı PHP ad alanını atamaktır namespace:

Route::group(['namespace' => 'Admin'], function () {
    // Controllers Within The "App\Http\Controllers\Admin" Namespace
});

RouteServiceProviderVarsayılan olarak, rota dosyalarınızı bir ad alanı grubunda içerir ve tam ad alanı öneki belirtilmeden denetleyici yollarını kaydettirmenize izin verir . Yani, sadece ad alanının taban isim alanının peşinde olan kısmını belirtmeniz yeterlidir.App\Http\ControllersApp\Http\Controllers

 

Alt Alan Yönlendirme

Alt alan yönlendirmeyi işlemek için güzergah grupları da kullanılabilir. Alt alanlara, yalnızca rota URI'leri gibi rota parametreleri atanabilir; böylece, rota veya denetleyicinizde kullanılacak alt alanın bir bölümünü yakalamanız mümkün olur. Alt etki alanı domain, grup özniteliği dizisindeki anahtarı kullanarak belirtilebilir:

Route::group(['domain' => '{account}.myapp.com'], function () {
    Route::get('user/{id}', function ($account, $id) {
        //
    });
});

 

Güzergah Önekleri

prefixGrup özelliği, belirli bir URI gruptaki her yol önek için kullanılabilir. Örneğin, grup içindeki tüm rota URI'lerinin önekini almak isteyebilirsiniz admin:

Route::group(['prefix' => 'admin'], function () {
    Route::get('users', function ()    {
        // Matches The "/admin/users" URL
    });
});

 

Güzergah Model Bağlama

Bir rota veya denetleyici eylemine bir model kimliği eklerken, çoğunlukla bu kimliği karşılayan modeli almak için sorgular. Laravel rota modeli bağlama, model örneklerini otomatik olarak rotalarınıza enjekte etmek için uygun bir yol sağlar. Örneğin, bir kullanıcının kimliği enjekte etmek yerine User, verilen kimliğe uyan tüm örnek örneğini enjekte edebilirsiniz .

 

Örtük bağlama

Laravel, tip ima edilen değişken adları bir rota segment adıyla eşleşen rota veya kontrolör eylemlerinde tanımlanan sıradan modelleri otomatik olarak çözümler. Örneğin:

Route::get('api/users/{user}', function (App\User $user) {
    return $user->email;
});

Yana $userdeğişken olarak, özelikle tip-ima Etkili modeli ve değişken ismi ile eşleşen tanım segmenti, laravel otomatik olarak talep tanım karşılık gelen değeri ile eşleşen bir kimliği olan bir model örneği enjekte edecektir. Eşleşen bir model örneği veritabanında bulunamazsa, bir 404 HTTP yanıtı otomatik olarak oluşturulur.App\User{user}

Anahtar Adı Özelleştirme

Model idbağlamanın, belirli bir model sınıfını alırken başka bir veritabanı sütunu kullanmasını isterseniz, Yöntemi Sıfır modeli geçersiz kılabilirsiniz getRouteKeyName:

/**
 * Get the route key for the model.
 *
 * @return string
 */
public function getRouteKeyName()
{
    return 'slug';
}

 

Açık Ciltleme

Açık modelbağlamayı kaydetmek için yönlendiricinin yöntemini kullanarak belirli bir parametrenin sınıfını belirtin. İçeri sizin açık modeli bağlamaları tanımlamalıdır bootyöntemi RouteServiceProvidersınıfının:

public function boot()
{
    parent::boot();

    Route::model('user', App\User::class);
}

Ardından, bir parametre içeren bir rota tanımlayın:{user}

Route::get('profile/{user}', function (App\User $user) {
    //
});

Tüm parametreleri modele bağladığımız için rotaya bir örnek verilecektir . Örneğin, bir istek , kimliğine sahip olan veritabanından örneği enjekte edecektir .{user}App\UserUserprofile/1User1

Eşleşen bir model örneği veritabanında bulunmazsa, bir 404 HTTP yanıtı otomatik olarak oluşturulur.

Çözünürlük Mantığını Özelleştirme

Kendi çözünürlük mantığını kullanmak isterseniz, yöntemi kullanabilirsiniz . Eğer geçmek yöntem tanım segmentinin değeri alır ve yol enjekte edilmelidir sınıfı örneği döndürür:Route::bindClosurebind

public function boot()
{
    parent::boot();

    Route::bind('user', function ($value) {
        return App\User::where('name', $value)->first();
    });
}

 

Form Yöntemi Sahtecatma

HTML formları desteklemez PUTPATCHveya DELETEeylemler. Tanımlarken Yani PUTPATCHya DELETEbir HTML formundan denir yolları, bir gizli eklemeniz gerekecektir _methodforma alanını. Alanla gönderilen değer _method, HTTP istek yöntemi olarak kullanılacaktır:

<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

Sen kullanabilir method_fieldoluşturmak için yardımcı _methodgirişi:

{{ method_field('PUT') }}

 

Geçerli Güzergaha Erişim

Sen kullanabilir currentcurrentRouteNameve currentRouteActionüzerinde yöntemleri Routegelen istek işleme rota hakkında bilgilere erişmek için cepheye:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Erişilebilir tüm yöntemleri gözden geçirmek için, Rota cephesinin ve Rota örneğinin temelindeki sınıfın API belgelerine bakın .

1 Yorum Yapıldı

  1. Hasan Ablak 2019-02-07 16:03:54

    Mükemmel

Yorum Yollayın