Yönlendirme (Route) - LARAVEL
Yönlendirme
- Temel Yönlendirme
- Rota Parametreleri
- Adlandırılmış Güzergahlar
- Yol Grupları
- Güzergah Model Bağlama
- Form Yöntemi Sahtecatma
- Geçerli Güzergaha Erişim
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ı, routes
dizinde 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.php
web
routes/api.php
api
Ç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. match
Yöntemi kullanarak bunu yapabilirsiniz. Ya da any
yö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ı POST
, PUT
ya DELETE
tanımlanan yolları web
yolları 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ı
where
Bir rota örneği üzerindeki yöntemi kullanarak, rota parametrelerinin biçimini sınırlayabilirsiniz . where
Yö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, pattern
yöntemi kullanabilirsiniz . Bu kalıpları boot
sizin 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. name
Yö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 route
iş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 route
iş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 middleware
iç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
});
RouteServiceProvider
Varsayı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\Controllers
App\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
prefix
Grup ö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 $user
değ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 id
bağ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 model
bağ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 boot
yöntemi RouteServiceProvider
sı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\User
User
profile/1
User
1
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::bind
Closure
bind
public function boot()
{
parent::boot();
Route::bind('user', function ($value) {
return App\User::where('name', $value)->first();
});
}
Form Yöntemi Sahtecatma
HTML formları desteklemez PUT
, PATCH
veya DELETE
eylemler. Tanımlarken Yani PUT
, PATCH
ya DELETE
bir HTML formundan denir yolları, bir gizli eklemeniz gerekecektir _method
forma 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_field
oluşturmak için yardımcı _method
girişi:
{{ method_field('PUT') }}
Geçerli Güzergaha Erişim
Sen kullanabilir current
, currentRouteName
ve currentRouteAction
üzerinde yöntemleri Route
gelen 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 .
Mükemmel