লারাভেল কাস্টম মিডিলওয়ার তৈরী

Laravel কাস্টম মিডিলওয়ার

আমাদের অনেক প্রয়োজনে লারাভেলে কাস্টম মিডিলওয়ার তৈরি করার দরকার পরে। আমরা চাইলে কোনো থার্ডপার্টি প্লাগিন ব্যবহার না করে সহজেই একটি লারাভেল মিডিলওয়ার তৈরী করে নিতে পারি। তাহলে চলুন দেখা যাক।

প্রথমে নিচের আর্টিসান কমান্ডটি দিয়ে একটি মিডিলওয়ার তৈরী করে নেই।

php artisan make:middleware CheckRole

এই কমান্ডটি চালানোর পর আমাদের একটি নতুন ক্লাস তৈরী হবে app/Http/Middleware এই ফোল্ডারে। এখন ফাইলটি ওপেন করি।

<?php

namespace App\Http\Middleware;

use Closure;

class CheckRole
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // Perform action

        return $next($request);
    }
}

এখন আমরা এটি একটু পরিবর্তন করে আমাদের ব্যবহার উপযোগী করতে পারি। ধরি আমাদের চেক করা প্রয়োজন যে কোনো ইউজারের কোনো একটি কাজ করার অনুমতি আছে কিনা। তাহলে লারাভেল কোডটি হবে নিচের মতো।

<?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);
    }

}

যদি ইউজারের রোল না থাকে তবে তাকে রিডাইরেক্ট করে দিবো। এখন প্রশ্ন হবে যে $role আসলো কোথা থেকে ?

আসলে এইটা একটা আর্গুমেন্ট। এটা আমরা পাস্ করবো কন্ট্রোলার থেকে। চলো তার আগে আমরা আমাদের মিডিলওয়ার রেজিস্টার করে নেই। রেজিস্টার করার জন্য app/Http/Kernel.php এই ফাইলটি ওপেন করুন এবং নিচের মতো আমাদের মিডিলওয়ার টি এড করে দেই।

// Within App\Http\Kernel Class...

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,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'checkRole' => \App\Http\Middleware\CheckRole::class,
];

এখন আমরা কন্ট্রোলারে যাই এবং নিচের লাইন যোগ করি।

//At our Controller

public function __construct()
{
    $this->middleware('checkRole:admin');
}

একটু উপরে যে আমরা একটি $role ভ্যারিয়েবল ব্যবহার করেছিলাম ঐটা এখানে checkRole এর পরে কোলন দিয়ে লিখেছি। এখন সহজেই যেকোনো রোল দিয়ে চেক করা যাবে যে ইউজার ওই রোল এ আছে কিনা।

ধন্যবাদ।

স্মার্টফোনে প্রোগ্রামিং কিভাবে করবো?