Makaleler

Laravel ara yazılımı nasıl çalışır?

Laravel ara yazılımı, kullanıcının isteği ile uygulamanın yanıtı arasına müdahale eden bir ara uygulama katmanıdır.

Bu, kullanıcı (Laravel görünümü) sunucuya (Laravel denetleyicisi) bir istekte bulunduğunda, isteğin ara katman yazılımından geçeceği anlamına gelir. Bu şekilde ara yazılım, isteğin doğrulanıp doğrulanmadığını kontrol edebilir: 

  • kullanıcının isteğinin kimliği doğrulanırsa, istek arka uca gönderilir;
  • kullanıcının isteğinin kimliği doğrulanmamışsa, ara yazılım kullanıcıyı oturum açma ekranına yönlendirecektir.

Laravel şunları yapmanızı sağlar defiKimlik doğrulama dışındaki çeşitli görevleri gerçekleştirmek için ek ara yazılımı tamamlayın ve kullanın. 

Kimlik doğrulama ve CSRF koruması gibi laravel ara yazılımları dizinde bulunur uygulama/Http/Ara yazılım .

Bu nedenle ara yazılımın, koşulları doğrulamanın ve eylemler gerçekleştirmenin mümkün olduğu bir http istek filtresi olduğunu söyleyebiliriz.

Ara yazılım oluşturma

Yeni bir ara yazılım oluşturmak için aşağıdaki komutu çalıştırıyoruz:

php artisan make:middleware <name-of-middleware>

biz yaratırız middleware ve biz buna diyoruz CheckAge, artisan bize şu şekilde cevap verecektir:

Yukarıdaki pencere, ara yazılımın "" adıyla başarıyla oluşturulduğunu gösterir. Kontrol Yaşı ".

CheckAge ara yazılımının oluşturulup oluşturulmadığını görmek için app/Http/Middleware klasöründeki projeye gidin, yeni oluşturulan dosyayı göreceksiniz.

Yeni oluşturulan dosya aşağıdaki koda sahiptir

<?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)
    {
        return $next($request);
    }
}

Ara yazılım kullan

Ara katman yazılımını kullanmak için onu kaydetmemiz gerekir.

Laravel'de iki tür ara yazılım vardır:

  • Middleware globale
  • Route Middleware

Il küresel ara katman yazılımı uygulamadan gelen her HTTP isteğinde yürütülürken, Yönlendirme Ara Yazılımı belirli bir yola atanacaktır. Middleware şu adreste kaydedilebilir: app/Http/Kernel.php. Bu dosya iki özellik içeriyor $ara yazılım e $routeMiddleware . $middleware özelliği küresel ara katman yazılımını ve sahipliğini kaydetmek için kullanılır $routeMiddleware rotaya özel ara yazılımları kaydetmek için kullanılır.

Genel ara katman yazılımını kaydetmek için, sınıfı $orta katman özelliğinin sonunda listeleyin.

protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

Rotaya özgü ara yazılımları kaydetmek için anahtarı ve değeri $routeMiddleware özelliğine ekleyin.

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

Biz yarattık Kontrol Yaşı önceki örnekte. Artık bunu ara yazılım rota özelliğinde kaydedebiliriz. Böyle bir kayıt için kod aşağıda gösterilmiştir.

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
    ];

Ara yazılım parametreleri

Middleware ile de parametre geçebiliriz. 

Örneğin, uygulamanızın kullanıcı, yönetici, süper yönetici vb. farklı rolleri varsa. ve role dayalı eylemi doğrulamak istiyorsanız, bunu ara yazılım ile parametreleri ileterek yapabilirsiniz. 

Oluşturduğumuz ara yazılım aşağıdaki işlevi içerir ve argümandan sonra özel argümanları iletebiliriz. $sonraki .

    public function handle($request, Closure $next)
    {
        return $next($request);
    }

Şimdi sıfırdan oluşturacağımız yeni bir ara katmana rol parametresini ayarlamaya çalışalım ve ardından aşağıdaki komutu çalıştırarak Rol Ara Katmanı oluşturmaya geçelim.

İşleç yöntemini aşağıdaki gibi değiştirin

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

parametreyi ekledik $roleve yöntemin içinde satır echo çıktıya rolün adını yazmak için.

İnovasyon bülteni
İnovasyonla ilgili en önemli haberleri kaçırmayın. Onları e-posta ile almak için kaydolun.

Şimdi belirli bir yol için RoleMiddleware ara yazılımını kaydedelim

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
    ];

Şimdi ara yazılımı parametre ile test etmek için bir istek ve bir yanıt oluşturmamız gerekiyor. Yanıtı simüle etmek için TestController olarak adlandıracağımız denetleyiciyi oluşturalım.

php artisan make:controller TestController --plain

az önce çalıştırılan komut, klasörün içinde yeni bir denetleyici oluşturacak app/Http/TestController.phpve yöntemi değiştirin index çizgi ile echo "<br>Test Controller.";

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class TestController extends Controller {
   public function index() {
      echo "<br>Test Controller.";
   }
}

Yanıt ayarını yaptıktan sonra dosyayı düzenleyerek request oluşturuyoruz. routes.phpekleyerek route role

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

bu noktada URL'yi ziyaret ederek örneği deneyebiliriz. http://localhost:8000/role

ve tarayıcıda ikisini göreceğiz echo

Role editor
Test Controller

Sonlandırılabilir Ara Yazılım

Il terminable Middleware Yanıt tarayıcıya gönderildikten sonra bazı görevleri gerçekleştirir. Bu, yöntemle bir ara yazılım oluşturarak elde edilebilir. ara yazılımda sonlandırın. Il terminable Middleware ile kayıtlı olmalıdır middleware küresel. yöntem terminate iki argüman alacak $ istek e $ yanıtı. 

Yöntem Terminate aşağıdaki kodda gösterildiği gibi oluşturulmalıdır.

php artisan make:middleware TerminateMiddleware

Ara yazılım oluşturulduktan sonra app/Http/Middleware/TerminateMiddleware.php kodu şu şekilde değiştirelim

<?php

namespace App\Http\Middleware;
use Closure;

class TerminateMiddleware {
   public function handle($request, Closure $next) {
      echo "Executing statements of handle method of TerminateMiddleware.";
      return $next($request);
   }
   
   public function terminate($request, $response) {
      echo "<br>Executing statements of terminate method of TerminateMiddleware.";
   }
}

bu durumda bir yöntemimiz var handle ve bir yöntem terminate iki parametre ile $request e $response.

Şimdi Middleware'i kaydedelim

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
        'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
    ];

Şimdi yanıtı simüle etmek için denetleyiciyi oluşturmamız gerekiyor.

php artisan make:controller XYZController --plain

sınıfın içeriğini değiştirmek

class XYZController extends Controller {
   public function index() {
      echo "<br>XYZ Controller.";
   }
}

Şimdi dosyayı düzenlememiz gerekiyor routes/web.php isteği etkinleştirmek için gereken yolları ekleme

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'XYZController@index',
]);

bu noktada URL'yi ziyaret ederek örneği deneyebiliriz. http://localhost:8000/terminate

ve tarayıcıda aşağıdaki satırları göreceğiz

Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware

Ercole Palmeri

Bunları da beğenebilirsiniz:

İnovasyon bülteni
İnovasyonla ilgili en önemli haberleri kaçırmayın. Onları e-posta ile almak için kaydolun.

Son Makaleler

Veeam, korumadan yanıt ve kurtarmaya kadar fidye yazılımı için en kapsamlı desteği sunuyor

Veeam Coveware, siber şantaj olaylarına müdahale hizmetleri sağlamaya devam edecek. Coveware adli tıp ve iyileştirme yetenekleri sunacak…

Nisan 23 2024

Yeşil ve Dijital Devrim: Kestirimci Bakım Petrol ve Gaz Endüstrisini Nasıl Dönüştürüyor?

Kestirimci bakım, tesis yönetimine yenilikçi ve proaktif bir yaklaşımla petrol ve gaz sektöründe devrim yaratıyor.…

Nisan 22 2024

Birleşik Krallık antitröst düzenleyicisi GenAI konusunda BigTech alarmını yükseltti

İngiltere CMA, Big Tech'in yapay zeka pazarındaki davranışları hakkında bir uyarı yayınladı. Orada…

Nisan 18 2024

Casa Green: İtalya'da sürdürülebilir bir gelecek için enerji devrimi

Avrupa Birliği'nin binalarda enerji verimliliğini artırmak amacıyla formüle ettiği "Yeşil Evler" Kararnamesi yasama sürecini tamamladı...

Nisan 18 2024