Laravel Rotalarında Uzmanlaşma

Yayınlanan: 2022-12-12

Arka uç söz konusu olduğunda, geliştiriciler sonunda rotalarla karşılaşır. Sunucunun aldığı her istek, istekleri denetleyicilere veya eylemlere eşleyen bir yönlendirme listesi aracılığıyla bir denetleyiciye yönlendirildiğinden, yollar arka ucun omurgası olarak kabul edilebilir.

Laravel bizim için birçok uygulama detayını gizler ve hem yeni hem de deneyimli geliştiricilerin web uygulamalarını geliştirmelerine yardımcı olmak için pek çok sözdizimsel şekerle birlikte gelir.

Laravel'de rotaların nasıl yönetileceğine yakından bakalım.

Laravel'de Arka Uç Yönlendirme ve Siteler Arası Komut Dosyası Çalıştırma

Bir sunucuda hem genel hem de özel yollar vardır. Genel yollar, sizi ve kullanıcılarınızı kötü niyetli aktörlere karşı savunmasız bırakabilecek bir tür enjeksiyon saldırısı olan siteler arası komut dosyası çalıştırma (XSS) olasılığı nedeniyle endişe kaynağı olabilir.

Sorun şu ki, bir kullanıcı oturum belirteci gerektirmeyen bir rotadan bunu gerektiren bir rotaya yönlendirilebilir ve yine de belirteç olmadan erişime sahip olur. Tweetlemek için tıklayın

Bu sorunu çözmenin en basit yolu, bu senaryoyu hafifletmek için yola "yönlendiren" ekleyerek yeni bir HTTP başlığı uygulamaktır:

 'main' => [ 'path' => '/main', 'referrer' => 'required,refresh-empty', 'target' => Controller\DashboardController::class . '::mainAction' ]

Laravel Temel Yönlendirme

Laravel'de yollar, kullanıcıların uygun isteği istenen denetleyiciye yönlendirmesine izin verir. En temel Laravel Rotası, bir Tekdüzen Varlık Tanımlayıcısını (rota yolunuz) ve hem işlev hem de sınıf olabilen bir kapanışı kabul eder.

Laravel'de rotalar web.php ve api.php dosyaları içinde oluşturulur. Laravel varsayılan olarak iki yolla gelir: biri WEB için ve diğeri API için.

Bu yollar, route/ klasöründe bulunur, ancak Providers/RouteServiceProvider.php dosyasına yüklenir.

Laravel'in yol hizmeti sağlayıcısının varsayılan durumunu gösteren bir komut satırı.
Laravel'in yol hizmeti sağlayıcısının varsayılan durumu.

Bunu yapmak yerine, route/ klasörünü tamamen atlayarak, rotaları doğrudan RouteServiceProvider.php içine yükleyebiliriz.

Doğrudan sağlayıcıda Laravel yollarının yüklenmesini gösteren bir komut satırı penceresi.
Laravel rotalarını doğrudan sağlayıcıya yükleme.

Yönlendirmeler

Bir rota tanımladığımızda, genellikle ona erişen kullanıcıyı yeniden yönlendirmek isteriz ve bunun nedenleri çok değişkendir. Bunun nedeni, kullanımdan kaldırılmış bir yol olması ve arka ucu veya sunucuyu değiştirmiş olmamız olabilir ya da iki faktörlü kimlik doğrulama (2FA) vb. yüklemek istiyor olmamız olabilir.

Laravel'in bunu yapmanın kolay bir yolu var. Çerçevenin basitliği sayesinde, giriş rotasını ve yönlendirilecek rotayı kabul eden Route cephesinde yönlendirme yöntemini kullanabiliriz.

İsteğe bağlı olarak üçüncü parametre olarak yönlendirme için durum kodunu verebiliriz. permanentRedirect yöntemi, her zaman bir 301 durum kodu döndürmesi dışında, redirect yöntemiyle aynı şeyi yapar:

 // Simple redirect Route::redirect("/class", "/myClass"); // Redirect with custom status Route::redirect("/home", "/office", 305); // Route redirect with 301 status code Route::permanentRedirect("/home", "office");

Yönlendirme yollarının içinde “hedef” ve “durum” anahtar kelimelerini parametre olarak kullanmamız Laravel tarafından rezerve edildiğinden yasaklanmıştır.

 // Illegal to use Route::redirect("/home", "/office/{status}");

Görüntüleme

Görünümler . Laravel uygulamamızın ön yüzünü oluşturmak için kullandığımız blade.php dosyaları. Blade şablon oluşturma motorunu kullanır ve yalnızca Laravel kullanarak tam yığın uygulama oluşturmanın varsayılan yoludur.

Rotamızın bir görünüm döndürmesini istiyorsak, yalnızca Rota cephesinde görüntüleme yöntemini kullanabiliriz. Görünüme iletilecek bir rota parametresini, bir görünüm adını ve isteğe bağlı bir değer dizisini kabul eder.

 // When the user accesses my-domain.com/homepage // the homepage.blade.php file will be rendered Route::view("/homepage", "homepage");

Görüşümüzün, bu parametre ile isteğe bağlı bir dizi geçirerek “Merhaba {name} ” demek istediğini varsayalım. Bunu aşağıdaki kodla yapabiliriz (görünümde eksik parametre gerekliyse, istek başarısız olur ve bir hata atar):

 Route::view('/homepage', 'homepage', ['name' => "Kinsta"]);

Rota Listesi

Uygulamanızın boyutu büyüdükçe, yönlendirilmesi gereken isteklerin sayısı da artacaktır. Ve büyük miktarda bilgi büyük bir kafa karışıklığına neden olabilir.

artisan route:list command bize yardımcı olabileceği yer burasıdır. Uygulamada tanımlanan tüm yollara, bunların ara katmanlarına ve denetleyicilerine genel bir bakış sağlar.

 php artisan route:list

Ara yazılımlar olmadan tüm yolların bir listesini görüntüler. Bunun için -v bayrağını kullanmalıyız:

 php artisan route:list -v

Rotalarınızın yollarında belirli adlara sahip olduğu etki alanına dayalı tasarım kullanıyor olabileceğiniz bir durumda, bu komutun filtreleme özelliklerinden şu şekilde yararlanabilirsiniz:

 php artisan route:list –path=api/account

Bu, yalnızca api/account ile başlayan yolları gösterecektir.

Öte yandan, –except-vendor veya –only-vendor seçeneklerini kullanarak Laravel'e üçüncü taraf tanımlı rotaları hariç tutma veya dahil etme talimatı verebiliriz.

Rota Parametreleri

Bazen, bir kullanıcı kimliği veya jeton gibi, rota ile URI'nin segmentlerini yakalamanız gerekebilir. Bunu, her zaman kaşlı ayraçlar ( {} ) içinde yer alan ve yalnızca alfabetik karakterlerden oluşması gereken bir rota parametresi tanımlayarak yapabiliriz.

Rotalarımızın geri aramaları içinde bağımlılıkları varsa, Laravel hizmet kapsayıcısı bunları otomatik olarak enjekte eder:

 use Illuminate\Http\Request; use Controllers/DashboardController; Route::post('/dashboard/{id}, function (Request $request, string $id) { return 'User:' . $id; } Route::get('/dashboard/{id}, DashboardController.php);

Gerekli Parametreler

Laravel'in gerekli parametreleri, arama yaparken atlamamıza izin verilmeyen rotalardaki parametrelerdir. Aksi takdirde, bir hata atılır:

 Route::post("/gdpr/{userId}", GetGdprDataController.php");

Şimdi GetGdprDataController.php içinde $userId parametresine doğrudan erişimimiz olacak.

 public function __invoke(int $userId) { // Use the userId that we received… }

Bir rota herhangi bir sayıda parametre alabilir. Listelendikleri sıraya göre rota geri aramalarına/denetleyicilerine enjekte edilirler:

 // api.php Route::post('/gdpr/{userId}/{userName}/{userAge}', GetGdprDataController.php); // GetGdprDataController.php public function __invoke(int $userId, string $userName, int $userAge) { // Use the parameters… }

Opsiyonel Parametreler

Yalnızca bir parametrenin mevcut olduğu ve başka hiçbir şeyin olmadığı bir yol üzerinde bir şeyler yapmak istediğimiz bir durumda, tüm uygulamayı etkilemeden isteğe bağlı bir parametre ekleyebiliriz. Bu isteğe bağlı parametreler ? onlara eklendi:

 Route::get('/user/{age?}', function (int $age = null) { if (!$age) Log::info("User doesn't have age set"); else Log::info("User's age is " . $age); } Route::get('/user/{name?}', function (int $name = "John Doe") { Log::info("User's name is " . $name); }

Rota Joker Karakteri

Laravel, isteğe bağlı veya gerekli parametrelerimizin nasıl görünmesi gerektiğini filtrelememiz için bir yol sağlar.

Diyelim ki bir kullanıcı kimliği dizisi istiyoruz. Bunu where yöntemini kullanarak rota düzeyinde bu şekilde doğrulayabiliriz.

where yöntemi, parametrenin adını ve doğrulamada uygulanacak normal ifade kuralını kabul eder. Varsayılan olarak, ilk parametreyi alır, ancak çok sayıda varsa, anahtar olarak parametrenin adını ve değer olarak kuralı içeren bir diziyi iletebiliriz ve Laravel hepsini bizim için ayrıştırır:

 Route::get('/user/{age}', function (int $age) { // }->where('age', '[0-9]+'); Route::get('/user/{age}', function (int $age) { // }->where('[0-9]+'); Route::get('/user/{age}/{name}', function (int $age, string $name) { // }->where(['age' => '[0-9]+', 'name' => '[az][Az]+');

Bunu bir adım öteye götürebilir ve Route cephesinde pattern yöntemini kullanarak uygulamamızdaki tüm rotalarda doğrulama uygulayabiliriz:

 Route::pattern('id', '[0-9]+');

Bu, her id parametresini bu regex ifadesiyle doğrulayacaktır. Ve onu tanımladığımızda, o parametre adını kullanan tüm rotalara otomatik olarak uygulanacaktır.

Gördüğümüz gibi, Laravel yolda ayırıcı olarak / karakterini kullanıyor. Yolda kullanmak istiyorsak, bir where regex kullanarak yer tutucumuzun bir parçası olmasına açıkça izin vermeliyiz.

 Route::get('/find/{query}', function ($query) { // })->where('query', , '.*');

Tek dezavantajı, yalnızca son rota segmentinde desteklenecek olmasıdır.

Adlandırılmış Rotalar

Adından da anlaşılacağı gibi, rotaları adlandırabiliriz, bu da URL'ler oluşturmayı veya belirli rotalar için yönlendirmeyi kolaylaştırır.

Kesinti süresi ve WordPress sorunlarıyla mı mücadele ediyorsunuz? Kinsta, size zaman kazandırmak için tasarlanmış barındırma çözümüdür! Özelliklerimize göz atın

Adlandırılmış Rotalar Nasıl Oluşturulur

Adlandırılmış bir rota oluşturmanın basit bir yolu, Route cephesinde zincirlenen name yöntemiyle sağlanır. Her rotanın adı benzersiz olmalıdır:

 Route::get('/', function () { })->name("homepage");

Rota Grupları

Rota grupları, ara yazılımlar gibi rota özniteliklerini her rotada yeniden tanımlamaya gerek kalmadan çok sayıda rotada paylaşmanıza olanak tanır.

Ara yazılım

Sahip olduğumuz tüm rotalara bir ara katman yazılımı atamak, önce group yöntemini kullanarak bunları bir grupta birleştirmemize olanak tanır. Göz önünde bulundurulması gereken bir nokta, ara yazılımların gruba uygulandıkları sırayla yürütülmesidir:

 Route:middleware(['AuthMiddleware', 'SessionMiddleware'])->group(function () { Route::get('/', function() {} ); Route::post('/upload-picture', function () {} ); });

Kontrolörler

Bir grup aynı denetleyiciyi kullandığında, o grup içindeki tüm rotalar için ortak denetleyiciyi tanımlamak üzere controller yöntemini kullanabiliriz. Şimdi rotanın çağıracağı metodu belirtmeliyiz.

 Route::controller(UserController::class)->group(function () { Route::get('/orders/{userId}', 'getOrders'); Route::post('/order/{id}', 'postOrder'); });

Alt alan yönlendirme

Alt alan adı, bir web sitesinin alan adının başına eklenen bir ek bilgi parçasıdır. Bu, web sitelerinin çevrimiçi mağazalar, bloglar, sunumlar vb. gibi belirli işlevler için içeriklerini web sitesinin geri kalanından ayırmasına ve düzenlemesine olanak tanır.

Rotalarımız, alt alan yönlendirmesini işlemek için kullanılabilir. Domaini ve subdomain'in bir kısmını controller ve route'umuzda kullanmak için yakalayabiliriz. Route cephesinde bulunan domain metodu yardımıyla rotalarımızı tek bir domain altında toplayabiliriz:

 Route::domain('{store}.enterprise.com')->group(function() { Route::get('order/{id}', function (Account $account, string $id) { // Your Code } });

Önekler ve İsim Önekleri

Ne zaman bir rota grubumuz olsa, onları tek tek değiştirmek yerine, Laravel'in sağladığı, Route cephesinde prefix ve name gibi ekstra yardımcı programlardan faydalanabiliriz.

prefix yöntemi, gruptaki her rotayı belirli bir URI ile öneklemek için kullanılabilir ve name yöntemi, her rota adını belirli bir dizeyle öneklemek için kullanılabilir.

Bu, onları tanımlamak için her bir adı veya ön eki değiştirmemize gerek kalmadan yönetici rotaları gibi yeni şeyler oluşturmamıza olanak tanır:

 Route::name('admin.")->group(function() { Route::prefix("admin")->group(function() { Route::get('/get')->name('get'); Route::put('/put')->name(put'); Route::post('/post')->name('post'); }); });

Artık bu yollar için URI'ler admin/get , admin/put , admin/post ve admin.get , admin.put ve admin.post adları olacaktır.

Rota Önbelleğe Alma

Uygulamayı üretim sunucularına dağıtırken, iyi bir Laravel geliştiricisi Laravel'in rota önbelleğinden yararlanacaktır.

Rota Önbelleğe Alma Nedir?

Rotayı önbelleğe alma, tüm uygulama rotalarını kaydetmek için gereken süreyi azaltır.

php artisan route:cache çalıştırıldığında bir Illuminate/Routing/RouteCollection örneği oluşturulur ve kodlandıktan sonra seri hale getirilmiş çıktı bootstrap/cache.routes.php konumuna yazılır.

Şimdi, varsa başka herhangi bir istek bu önbellek dosyasını yükleyecektir. Bu nedenle, uygulamamızın artık yönlendirme dosyasındaki girdileri Illuminate/Routing/ Illuminate/Routing/RouteCollection Illuminate/Routing/Route nesnelerine ayrıştırması ve dönüştürmesi gerekmez.

Rota Önbelleğini Kullanmak Neden Önemli?

Laravel'in sağladığı rota önbelleğe alma özelliğini kullanmadığınızda, uygulamanız olabileceğinden daha yavaş çalışma riskiyle karşı karşıya kalır ve bu da satışları, kullanıcıyı elde tutmayı ve markanıza olan güveni azaltabilir.

Projenizin ölçeğine ve kaç yol olduğuna bağlı olarak, basit bir rota önbelleğe alma komutu çalıştırmak, uygulamanızı %130 ila %500 arasında hızlandırabilir; bu, neredeyse hiç çaba harcamadan büyük bir kazanç sağlar.

Özet

Yönlendirme, arka uç geliştirmenin bel kemiğidir. Laravel çerçevesi, rotaları tanımlamanın ve yönetmenin ayrıntılı bir yolunu sağlayarak bu konuda üstündür. Bu kapsamlı kılavuzda Laravel yönlendirme konusunda rahat olun Tweet için Tıklayın

Geliştirme gerçekten de herkes için erişilebilir olabilir ve yalnızca Laravel'de oluşturulmuş olması sayesinde bir uygulamayı hızlandırmaya yardımcı olabilir.

Laravel yolları ile ilgili başka hangi püf noktaları ve ipuçlarıyla karşılaştınız? Yorumlar bölümünde bize bildirin!