আপনার কন্ট্রোলার অনেক বেশি কাজ করছে
আপনার কন্ট্রোলারটি খুলুন। আপনার store মেথডটি দেখুন।
এতে কি ৪০ লাইনের কোড আছে? এটি কি একটি বিশাল ভ্যালিডেশন ব্লক দিয়ে শুরু হয়, তারপর বেশ কিছু if স্টেটমেন্ট, এরপর বিজনেস লজিক এবং সবশেষে একটি return?
আপনার কন্ট্রোলার এমন কাজ করছে যা তার কাজ নয়।
একটি কন্ট্রোলারের একটি সহজ ভূমিকা রয়েছে। এটি একটি রিকোয়েস্ট গ্রহণ করে, সমস্যা সমাধানের জন্য একটি সার্ভিস কল করে এবং একটি রেসপন্স প্রদান করে। এটিকে একজন ওয়েটারের সাথে তুলনা করুন। একজন ওয়েটার আপনার খাবার নিয়ে আসে, কিন্তু তারা খাবার রান্না করে না।
যখন আপনি ভ্যালিডেশন, অথরাইজেশন এবং ডেটা প্রসেসিং একটি কন্ট্রোলারের ভেতরে রাখেন, তখন এটি একটি বিশৃঙ্খলায় পরিণত হয়। আপনি শেষ পর্যন্ত ৮০ লাইনের একটি দানবীয় কোড পেয়ে যান যা কেউ স্পর্শ করতে চায় না।
Laravel-এ এর একটি বিল্ট-ইন সমাধান রয়েছে: Form Requests।
প্রতিটি মেথডে ভ্যালিডেশন এবং অথরাইজেশন লজিক বারবার লেখা বন্ধ করুন। Single Responsibility Principle ব্যবহার করুন। একটি ক্লাসের পরিবর্তনের জন্য কেবল একটি কারণ থাকা উচিত। রিকোয়েস্ট ফ্লো পরিবর্তন হলে কন্ট্রোলার পরিবর্তিত হয়। শুধুমাত্র একটি ভ্যালিডেশন রুল পরিবর্তনের কারণে এটি পরিবর্তন হওয়া উচিত নয়।
একটি ডেডিকেটেড রিকোয়েস্ট ক্লাস তৈরি করতে এই কমান্ডটি চালান:
php artisan make:request StorePostRequest
আপনার লজিক এই নতুন ক্লাসে নিয়ে যান। একটি Form Request তিনটি প্রধান বিষয় পরিচালনা করে:
• Authorization: একজন ব্যবহারকারী কোনো অ্যাকশন নিতে পারবেন কি না তা নির্ধারণ করতে authorize মেথডটি ব্যবহার করুন। যদি এটি false রিটার্ন করে, তবে Laravel স্বয়ংক্রিয়ভাবে একটি 403 এরর পাঠাবে।
• Validation: আপনার ডেটার প্রয়োজনীয়তা সংজ্ঞায়িত করতে rules মেথডটি ব্যবহার করুন।
• Data Preparation: ভ্যালিডেশন চলার আগে ডেটা পরিষ্কার বা পরিবর্তন করতে prepareForValidation ব্যবহার করুন। এটি স্লাগ (slug) তৈরি করা বা ফোন নম্বর নরমালাইজ করার জন্য উপযুক্ত।
একবার আপনি এই লজিকটি সরিয়ে ফেললে, আপনার কন্ট্রোলারটি ছোট হয়ে আসবে। এটি দেখতে অনেকটা এরকম হতে পারে:
public function store(StorePostRequest $request)
{
$post = Post::create($request->validated());
return redirect()->route('posts.show', $post);
}
ব্যাস, এটুকুই। মাত্র দুটি লাইন।
কন্ট্রোলারটি হালকা বা স্লিম থাকে কারণ মেথড শুরু হওয়ার আগেই Laravel ভ্যালিডেশন এবং অথরাইজেশন সম্পন্ন করে ফেলে। যদি ডেটা ভুল হয়, তবে ব্যবহারকারী তাৎক্ষণিকভাবে একটি এরর পাবেন।
একটি সতর্কবার্তা। সবকিছুর জন্য Form Requests ব্যবহার করবেন না। যদি আপনার একটি ছোট রুট থাকে যেখানে মাত্র একটি সাধারণ ফিল্ড আছে, তবে ভ্যালিডেশন ইনলাইন (inline) রাখুন। যখন লজিক বড় হয়, বারবার প্রয়োজন হয় বা পারমিশনের বিষয় থাকে, তখন Form Requests ব্যবহার করুন।
এছাড়াও, Form Request-এর ভেতরে বিজনেস লজিক রাখবেন না। ক্যালকুলেশন এবং ডেটাবেস আপডেট করার কাজ Service লেয়ারের জন্য।
আজই আপনার সবচেয়ে বিশৃঙ্খল কন্ট্রোলারটি খুঁজে বের করুন। ভ্যালিডেশন অংশটি একটি Form Request-এ সরিয়ে নিন। দেখুন এটি কীভাবে ছোট হয়ে আসে।
আপনি এ পর্যন্ত দেখা সবচেয়ে বড় store মেথড কোনটি? কমেন্টে আমাকে জানান।
Source: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o
