आपका Controller गलत काम कर रहा है

अपना controller खोलें। एक store method ढूँढें।

क्या इसमें 40 लाइनों का कोड है? क्या आपको एक बड़ा validation block, कई if statements, business logic, और फिर एक return statement दिखाई देता है?

आपका controller वह काम कर रहा है जो उसे नहीं करना चाहिए।

एक controller का केवल एक ही काम होता है। यह एक request प्राप्त करता है, समस्या को हल करने के लिए एक service को कॉल करता है, और एक response वापस करता है। यह एक waiter है, chef नहीं।

जब आप controller के अंदर validation और authorization डालते हैं, तो यह सब गड़बड़ हो जाता है। अंत में आपके पास 80 लाइनों का ऐसा कोड बचता है जिसे कोई छूना भी नहीं चाहता।

Laravel में एक built-in समाधान है: Form Requests।

एक सामान्य गलत pattern ऐसा दिखता है:

  • input data को validate करना
  • user permissions की जाँच करना
  • data को transform करना
  • business logic चलाना

यह Single Responsibility Principle को तोड़ता है। एक class के बदलने का केवल एक ही कारण होना चाहिए। एक controller तब बदलता है जब request flow बदलता है। इसे केवल इसलिए नहीं बदलना चाहिए क्योंकि कोई validation rule बदल गया है।

इसे ठीक करने के लिए इस command का उपयोग करें: php artisan make:request StorePostRequest

यह आपके request logic के लिए एक समर्पित file बनाता है। इन तीन चीज़ों को Form Request में ले जाएँ:

  • Authorization: permissions की जाँच करने के लिए authorize() method का उपयोग करें।
  • Validation: अपनी data requirements को परिभाषित करने के लिए rules() method का उपयोग करें।
  • Data Preparation: validation से पहले data को clean या format करने के लिए prepareForValidation() का उपयोग करें।

अब अपने controller को फिर से देखें:

public function store(StorePostRequest $request)
{
    $post = Post::create($request->validated());
    return redirect()->route('posts.show', $post);
}

अब controller केवल दो लाइनों का है। यह फिर से एक waiter की तरह काम करता है।

Laravel controller method शुरू होने से पहले ही authorization और validation को स्वचालित रूप से चला देता है। यदि validation विफल हो जाता है, तो उपयोगकर्ता को तुरंत error मिल जाता है।

इन guidelines का पालन करें:

  • यदि validation छोटा है और केवल एक ही जगह उपयोग किया जाता है, तो उसे inline रखें।
  • यदि validation बढ़ता है, बार-बार आता है, या इसमें authorization शामिल है, तो Form Request का उपयोग करें।
  • Form Request में business logic न डालें। उसके लिए Service layer का उपयोग करें।

आज ही अपना सबसे गड़बड़ controller ढूँढें। validation को Form Request में निकालें। देखें कि यह कैसे छोटा हो जाता है।

आपने अब तक का सबसे बड़ा store method कौन सा देखा है? मुझे comments में बताएं।

Source: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o