Middleware - LARAVEL
Middleware
- Giriş
- Middleware tanımlama
- Middleware'in Kaydedilmesi
- Middleware Parametreleri
- Sonlandırılabilir Middleware
Giriş
Middleware, uygulamanıza giren HTTP isteklerini filtrelemek için uygun bir mekanizma sağlar. Örneğin Laravel, uygulamanızın kullanıcısının kimlik doğrulamasını doğrulayan bir ara katmanı içeriyor. Kullanıcı kimliği doğrulanmazsa, katman kullanıcıyı oturum açma ekranına yönlendirir. Bununla birlikte, kullanıcı kimliği doğrulanırsa, ara katman, isteğin uygulamanın ilerleyişine izin vermesine izin verir.
Tabii ki, kimlik doğrulama dışında çeşitli görevleri yerine getirmek için ek katman yazılımı yazılabilir. Bir CORS katmanı, uygulamanızdan ayrılan tüm yanıtlara uygun başlık eklemenin sorumluluğunu üstlenebilir. Bir günlük ara katmanı, gelen tüm istekleri uygulamanıza günlüğe yazabilir.
Kimlik doğrulama ve CSRF koruması için katman da dahil olmak üzere Laravel çerçevesinde bulunan birkaç ara katman vardır. Tüm bu ara katmanlar dizinde bulunur .app/Http/Middleware
Middleware tanımlama
Yeni bir katman yaratmak için Artisan komutunu kullanın:make:middleware
php artisan make:middleware CheckAge
Bu komut dizininize yeni bir CheckAge
sınıf yerleştirecektir. Bu katman yazılımında, sağlanan kaynak 200'den büyükse, yalnızca rotaya erişim izni veriyoruz. Aksi takdirde, kullanıcıları URI'ya yönlendiriyoruz .app/Http/Middleware
age
home
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->age <= 200) {
return redirect('home');
}
return $next($request);
}
}
Gördüğünüz gibi , verilen age
değer eşit veya daha küçükse 200
, katman yazılımı istemciye bir HTTP yönlendirme döndürür; Aksi takdirde, talep başvurunun daha da ileri götürülür. Talebin uygulamaya derinlemesine geçmesi için (ara katmanın "geçişi" yapılmasına izin verilir), $next
geri aramayı yalnızca ile çağırın $request
.
Katman yazılımlarını, HTTP isteklerinin uygulamanıza yapmadan önce geçirmesi gereken bir dizi "katman" olarak tasarlamak en iyisidir. Her katman talebi inceleyebilir ve hatta tamamen reddedebilir.
Middleware öncesi ve sonrası
Bir ara katman, bir talebin öncesinde veya sonrasında çalışıp gerekmeyeceğine bağlı olarak ara katmanın kendisine bağlıdır. Örneğin, aşağıdaki ara katman , istek uygulama tarafından işlenmeden önce bazı görevleri yerine getirir:
<?php
namespace App\Http\Middleware;
use Closure;
class BeforeMiddleware
{
public function handle($request, Closure $next)
{
// Perform action
return $next($request);
}
}
Bununla birlikte, bu ara katman , isteği uygulama tarafından işlendikten sonra görevini yerine getirecektir:
<?php
namespace App\Http\Middleware;
use Closure;
class AfterMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);
// Perform action
return $response;
}
}
Middleware'in Kaydedilmesi
Global Middleware
Bir ara katman uygulamanıza her HTTP isteği sırasında çalışmasını istiyorsanız, basitçe katman sınıfını listelemek $middleware
için mülkiyet sınıfına.app/Http/Kernel.php
Middleware'i Yollara Atamak
Belirli güzergahlara orta katman atamak isterseniz, öncelikle orta katman dosyasına dosyanızda bir anahtar atamanız gerekir . Varsayılan olarak, bu sınıfın özelliği Laravel'e dahil edilen katman için girdiler içerir. Kendi listenizi eklemek için, onu bu listeye ekleyin ve seçiminize bir anahtar koyun. Örneğin:app/Http/Kernel.php
$routeMiddleware
// Within App\Http\Kernel Class...
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
Orta katman HTTP middleware
çekirdeğinde tanımlandıktan sonra, yolu bir ara katman atamak için yöntemi kullanabilirsiniz:
Route::get('admin/profile', function () {
//
})->middleware('auth');
Rotaya birden çok katman da atayabilirsiniz:
Route::get('/', function () {
//
})->middleware('first', 'second');
Katman yazılımları atarken, tam nitelikli sınıf adını da gönderebilirsiniz:
use App\Http\Middleware\CheckAge;
Route::get('admin/profile', function () {
//
})->middleware(CheckAge::class);
Middleware Grupları
Bazen, yollara atanmalarını kolaylaştırmak için birkaç katman aracını tek bir tuşla gruplamak isteyebilirsiniz. Bunu $middlewareGroups
HTTP çekirdeğinin mülkünü kullanarak yapabilirsiniz.
Laravel, web kullanıcı arayüzüne web
ve api
API rotalarına uygulamak isteyebileceğiniz ortak katmanlı yazılım içeren katmanlı yazılım gruplarıyla birlikte gelir :
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'auth:api',
],
];
Middleware grupları, tek tek katman yazılımıyla aynı sözdizimini kullanarak yollara ve denetleyici eylemlerine atanabilir. Yine, ara katman grupları, bir seferde bir ara katmanı çok sayıda ara katman atamak için daha kolay hale getiriyor:
Route::get('/', function () {
//
})->middleware('web');
Route::group(['middleware' => ['web']], function () {
//
});
Kutudan,
web
ara katman grubu otomatik uygulanır tarafından dosyaya .routes/web.php
RouteServiceProvider
Middleware Parametreleri
Middleware ayrıca ek parametreler de alabilir. Örneğin, uygulamanız, kimliği doğrulanmış kullanıcının belirli bir işlemi gerçekleştirmeden önce belirli bir "rolü" bulunduğunu doğrulaması gerekiyorsa, CheckRole
ek bir argüman olarak bir rol adı alan bir katman oluşturabilirsiniz.
Argümantan sonra ara katman yazılımlarına ek katman parametreleri iletilecek $next
:
<?php
namespace App\Http\Middleware;
use Closure;
class CheckRole
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string $role
* @return mixed
*/
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
// Redirect...
}
return $next($request);
}
}
Middleware parametreleri, katman adı ve parametrelerini a ile ayırarak rota tanımlarken belirtilebilir :
. Birden fazla parametre virgülle ayrılmalıdır:
Route::put('post/{id}', function ($id) {
//
})->middleware('role:editor');
Sonlandırılabilir Middleware
HTTP yanıt tarayıcıya gönderildikten sonra bazen ara katmanın bazı işler yapması gerekebilir. Örneğin Laravel ile birlikte gelen "session" katmanı, yanıt tarayıcıya gönderildikten sonra oturum verisini depola yazıyor. terminate
Orta katmanınızda bir yöntem tanımlarsanız, yanıt tarayıcıya gönderildikten sonra otomatik olarak çağrılır.
<?php
namespace Illuminate\Session\Middleware;
use Closure;
class StartSession
{
public function handle($request, Closure $next)
{
return $next($request);
}
public function terminate($request, $response)
{
// Store the session data...
}
}
terminate
Yöntem istek ve yanıt hem de uygulanmalıdır. Sonlandırılabilir bir ara katmanı tanımladıktan sonra, dosyadaki rota veya genel ara katman listesine eklemelisiniz .app/Http/Kernel.php
Ara terminate
katman üzerinde yöntemi çağırırken, Laravel servis kabından ara katmanın yeni bir örneğini çözecektir . Aynı yöntem katmanı örneği handle
ve terminate
yöntemleri çağrıldığında kullanmak istiyorsanız, katmanın yöntemini kullanarak ara katmanı kapsayıcıya kaydedin singleton
.
Henüz Yorum Yapılmamış, İlk Yorumu Siz Yapın