आपका कंट्रोलर बहुत ज़्यादा काम कर रहा है
अपना कंट्रोलर खोलें। अपने store मेथड को देखें।
क्या इसमें 40 लाइनों का कोड है? क्या यह एक बड़े वैलिडेशन ब्लॉक से शुरू होता है, जिसके बाद कई if स्टेटमेंट्स, फिर बिजनेस लॉजिक और अंत में एक return आता है?
आपका कंट्रोलर वह काम कर रहा है जो उसका काम नहीं है।
एक कंट्रोलर की एक सरल भूमिका होती है। यह एक रिक्वेस्ट प्राप्त करता है, समस्या को हल करने के लिए एक सर्विस को कॉल करता है, और एक रिस्पॉन्स वापस करता है। इसे एक वेटर की तरह समझें। एक वेटर आपका खाना लाता है। वे उसे पकाते नहीं हैं।
जब आप वैलिडेशन, ऑथोराइजेशन और डेटा प्रोसेसिंग को कंट्रोलर के अंदर रखते हैं, तो यह एक गड़बड़ (mess) बन जाता है। अंत में आपके पास 80 लाइनों का एक ऐसा 'मॉन्स्टर' बचता है जिसे कोई छूना भी नहीं चाहता।
Laravel में एक इन-बिल्ट समाधान है: Form Requests।
हर मेथड में वैलिडेशन और ऑथोराइजेशन लॉजिक को दोहराना बंद करें। Single Responsibility Principle का उपयोग करें। एक क्लास के पास बदलने का केवल एक ही कारण होना चाहिए। एक कंट्रोलर तब बदलता है जब रिक्वेस्ट फ्लो बदलता है। इसे केवल इसलिए नहीं बदलना चाहिए क्योंकि कोई वैलिडेशन रूल बदल गया है।
एक समर्पित रिक्वेस्ट क्लास बनाने के लिए इस कमांड को चलाएं:
php artisan make:request StorePostRequest
अपने लॉजिक को इस नई क्लास में ले जाएँ। एक Form Request तीन मुख्य चीज़ों को संभालता है:
• Authorization: यह तय करने के लिए कि क्या कोई यूजर कोई एक्शन ले सकता है, authorize मेथड का उपयोग करें। यदि यह false लौटाता है, तो Laravel स्वचालित रूप से 403 एरर भेज देता है।
• Validation: अपनी डेटा आवश्यकताओं को परिभाषित करने के लिए rules मेथड का उपयोग करें।
• Data Preparation: वैलिडेशन चलने से पहले डेटा को साफ़ करने या बदलने के लिए prepareForValidation का उपयोग करें। यह स्लग (slugs) जेनरेट करने या फोन नंबरों को नॉर्मलाइज़ करने के लिए एकदम सही है।
एक बार जब आप इस लॉजिक को हटा देते हैं, तो आपका कंट्रोलर छोटा हो जाता है। यह कुछ ऐसा दिख सकता है:
public function store(StorePostRequest $request)
{
$post = Post::create($request->validated());
return redirect()->route('posts.show', $post);
}
बस इतना ही। दो लाइनें।
कंट्रोलर हल्का (lean) बना रहता है क्योंकि Laravel मेथड शुरू होने से पहले ही वैलिडेशन और ऑथोराइजेशन चला देता है। यदि डेटा गलत है, तो यूजर को तुरंत एरर मिल जाता है।
एक सावधानी। हर चीज़ के लिए Form Requests का उपयोग न करें। यदि आपके पास एक साधारण फ़ील्ड वाला छोटा रूट है, तो वैलिडेशन को इनलाइन ही रखें। Form Requests का उपयोग तब करें जब लॉजिक बढ़े, दोहराया जाए, या इसमें परमिशन शामिल हो।
साथ ही, Form Request में बिजनेस लॉजिक न डालें। कैलकुलेशन और डेटाबेस अपडेट सर्विस लेयर (Service layer) में होने चाहिए।
आज ही अपना सबसे उलझा हुआ कंट्रोलर ढूँढें। वैलिडेशन को Form Request में निकालें। देखें कि वह कैसे छोटा हो जाता है।
आपने अब तक का सबसे बड़ा store मेथड कौन सा देखा है? मुझे कमेंट्स में बताएं।
Source: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o
