तुमचा Controller चुकीचे काम करत आहे
तुमचा controller उघडा. 'store' मेथड शोधा.
त्यात ४० ओळींचा कोड आहे का? तुम्हाला एक मोठा validation block, अनेक if statements, business logic आणि त्यानंतर एक return statement दिसते का?
तुमचा controller असे काम करत आहे जे त्याला करायला नको.
एका controller चे एकच काम असते. तो एक request स्वीकारतो, समस्या सोडवण्यासाठी एका service ला कॉल करतो आणि response परत करतो. तो वेटर आहे, शेफ नाही.
जेव्हा तुम्ही validation आणि authorization कंट्रोलरमध्ये ठेवता, तेव्हा गोंधळ निर्माण होतो. शेवटी तुमच्याकडे ८० ओळींचा असा कोड उरतो ज्याला कोणीही स्पर्श करू इच्छित नाही.
Laravel मध्ये याचे अंगभूत (built-in) समाधान आहे: Form Requests.
एक सामान्य चुकीची पद्धत (bad pattern) अशी दिसते:
- इनपुट डेटा व्हॅलिडेट करणे (Validating input data)
- युजरच्या परवानग्या तपासणे (Checking user permissions)
- डेटा ट्रान्सफॉर्म करणे (Transforming data)
- बिझनेस लॉजिक चालवणे (Running business logic)
यामुळे Single Responsibility Principle मोडतो. एका class मध्ये बदल होण्याचे फक्त एकच कारण असावे. जेव्हा request flow बदलतो तेव्हा controller बदलतो. केवळ validation rule बदलल्यामुळे तो बदलता कामा नये.
हे सुधारण्यासाठी ही कमांड वापरा:
php artisan make:request StorePostRequest
हे तुमच्या request logic साठी एक समर्पित फाईल तयार करते. या तीन गोष्टी Form Request मध्ये हलवा:
- Authorization: परवानग्या तपासण्यासाठी
authorize()मेथड वापरा. - Validation: तुमच्या डेटाच्या गरजा परिभाषित करण्यासाठी
rules()मेथड वापरा. - Data Preparation: validation पूर्वी डेटा स्वच्छ किंवा फॉरमॅट करण्यासाठी
prepareForValidation()वापरा.
आता तुमचा controller पुन्हा पहा:
public function store(StorePostRequest $request)
{
$post = Post::create($request->validated());
return redirect()->route('posts.show', $post);
}
आता controller फक्त दोन ओळींचा आहे. तो पुन्हा वेटरप्रमाणे काम करतो.
controller मेथड सुरू होण्यापूर्वीच Laravel आपोआप authorization आणि validation चालवते. जर validation फेल झाले, तर युजरला लगेच एरर मिळतो.
या मार्गदर्शक तत्त्वांचे (guidelines) पालन करा:
- जर validation लहान असेल आणि फक्त एकाच ठिकाणी वापरले जात असेल, तर ते इनलाइनच ठेवा.
- जर validation वाढले, वारंवार वापरले जाते किंवा त्यात authorization समाविष्ट असेल, तर Form Request वापरा.
- Form Request मध्ये business logic टाकू नका. त्यासाठी Service layer वापरा.
आज तुमचा सर्वात गोंधळलेला (messiest) controller शोधा. त्यातील validation काढून Form Request मध्ये हलवा. तो कसा लहान होतो ते पहा.
तुम्ही आतापर्यंत पाहिलेली सर्वात मोठी store method कोणती आहे? मला कमेंट्समध्ये सांगा.
Source: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o
