কিভাবে লারাবেল এপ্লিকেশন এর ডেমো বানাবেন

আমাদের অনেক সময় সফটওয়্যার এর এমন ১ টা ডেমো বনাতে হয় যেখানে কিছু কিছু ফাংশনালিটি বন্ধ করে রাখতে চাই ।

যেমন ধরুন আমাদের ১টা একাউন্টিং সফটওয়্যার আছে যেখানে আমরা ইডিট, ডিলিট একশন অথবা কিছু পেজ ডেমো তে অফ করে রাখতে চাই । ইউসার সেগূলো ভিসিট করতে পারবে বাট একশন করতে পারবেনা ।

এইটার পুরোতন সলুশন আমি কাজে লাগিয়েছিলাম আমাদের একটা এইস আর সফটওয়্যার এ তো সেখানে আমি কন্ট্রোলারে গিয়ে গিয়ে যেই যেই পেজ অথবা একশন গুলো ডেমো তে ডিসেবল থাকবে সেই মেথড গুলো থেকে ১টা এরর মেসেজ দিয়ে আগের পেজ এ আবার রিডাইরেক্ট করে দিতাম ।

এটা ছিলো অনেকটা এমন ধরুন আমাদের ১টা পোস্ট মডিউল আছে আমরা চাই ইউজার পোস্ট ডিলেট করতে না পারুক ক্লিক করার পরে আমরা একটা এরর মেসেজ জেনারেট করে দিবো তো আমি সেখানে এমন করে কোড লিখেছি।

public function destroy($id)

{

// it was a ajax request that’s why i response json

return response()->json(‘status’=>’error’,’message’ =>

‘this function is disabled in demo]’);

// for normal request

session()->flash(‘error,’disabled in demo’);

return redirect()->back();

try{

Post::remove($id);

return response()->json([‘status’=>’success’,’message’=>’Post removed’]);

}

catch(\Exception $e)

{

return $e;

}

}

সব কিছু ঠিক ঠাক কাজ করছে কিন্তু আমার প্রব্লেম টা কোথায় হচ্ছে আইডিয়া করুন তো ?

হুম আশা করি আপনি বুঝতে পারছেন আমার যদি শত শত ফাংশনালিটি এই রকম ডিসেবল করতে হয় তাহলে সব গুলো কন্ট্রোলারে গিয়ে গিয়ে আমাকে এভাবে লিখতে হবে যেটা অনেক সময় এর বেপার ।

তো এটার সমাধান কি তাহলে ?

আমরা একটা Middleware তৈরি করলে কেমন হয় যেটা আমাদের কোন ১টা রাউট যদি ডেমোর জন্যে হয় তাহলে ইউজার কে তার আগের যায়গায় বহাল রেখে ১টা এরর মেসেজ দিয়ে দিবে ? চলুন তৈরি করে নেয়া যাক Middleware টি ।

run this command on artisan console

php artisan make:middleware DemoMiddleware

ইয়ে আমরা Middleware বানাই পেলছি সেটা এখন পাওয়া যাবে

App\Http\Middleware এই নেমস্পেস এ , সেখানে গিয়ে DemoMiddleware টি ওপেন করুন আর handle মেথড এ নিছে র মত করে কোড লিখুন

public function handle($request, Closure $next)

{

if(request()->ajax())

{

return response()->json([‘status’=>’error’,’message’=>’This function is disabled in demo’]);

}

else

{

Session::flash(‘error’,’Opps! This function is disabled in demo’);

return redirect()->back();

}

return $next($request);

}

এখানে আমরা কি করেছি লক্ষ্য করুন কারেন্ট রিকুএস্ট যদি এজাক্স হয় তাহলে ইউজার কে যেসন রেসপন্স করছি যেতা javascript এর মাধ্যমে front end এ ধরেছি । আর যদি এজাক্স মেথড না হয় তাহলে সেসনে এরর ফ্ল্যাশ করে ইউজার কে তার আগের পেজ এ বহাল রেখেছি ।

এবার এই DemoMiddleware কে app\http\Kernel.php ফাইল এর মধ্যে রেজিস্টার করেন নিন routeMiddleware এ নিছের মত ..

protected $routeMiddleware = [

‘auth’ => \App\Http\Middleware\Authenticate::class,

‘permission’ => \App\Http\Middleware\CheckPermission::class,

‘demo’ => \App\Http\Middleware\DemoMiddleware::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,

];

এর পরে আপনি যে রাউট ডিসিবল করতে চান সেখানে demo Middleware টি এপ্লাই করুন

Route::post(‘add-to-cart’,’Cart\CartController@store’)->middleware(‘demo’);

চাইলে আপনি Group করে ও এপ্লাই করতে পারেন ।

এখন মাস্টার পেজ এ সেশন এর এরর মেসেজ টা ধরে শো করে দিন অথবা টোস্টার ইউস করে মেসেজটা দেখিয়ে দিন ।

এই সমাধান আগেরটার থেকে অনেক কম টাইম consuming এবং কম কোড লিখে করা পসিবল হয়েছে আশা করি ।