તમારું Controller ખૂબ વધારે કામ કરી રહ્યું છે
તમારું controller ખોલો. તમારા store method ને જુઓ.
શું તેમાં 40 લાઇનની કોડ છે? શું તે એક વિશાળ validation બ્લોકથી શરૂ થાય છે, ત્યારબાદ કેટલાક if statements, પછી business logic, અને અંતે return આવે છે?
તમારું controller એવું કામ કરી રહ્યું છે જે તેની જવાબદારી નથી.
Controller ની એક સરળ ભૂમિકા છે. તે એક request મેળવે છે, સમસ્યા ઉકેલવા માટે service ને કોલ કરે છે, અને response પરત કરે છે. તેને વેઈટર તરીકે વિચારો. વેઈટર તમારું ભોજન લાવે છે. તેઓ તેને રાંધતા નથી.
જ્યારે તમે validation, authorization, અને data processing ને controller ની અંદર મૂકો છો, ત્યારે તે ગડબડ બની જાય છે. અંતે તમારી પાસે 80 લાઇનનું એક એવું મોન્સ્ટર તૈયાર થઈ જાય છે જેને કોઈ સ્પર્શવા માંગતું નથી.
Laravel પાસે એક ઇન-બિલ્ટ ઉકેલ છે: Form Requests.
દરેક method માં validation અને authorization logic ને વારંવાર લખવાનું બંધ કરો. Single Responsibility Principle નો ઉપયોગ કરો. એક class બદલવા માટે માત્ર એક જ કારણ હોવું જોઈએ. જ્યારે request flow બદલાય ત્યારે controller બદલાય છે. માત્ર validation rule બદલાય એટલે controller બદલાવો જોઈએ નહીં.
એક સમર્પિત request class બનાવવા માટે આ command ચલાવો:
php artisan make:request StorePostRequest
તમારા logic ને આ નવી class માં ખસેડો. Form Request ત્રણ મુખ્ય વસ્તુઓ સંભાળે છે:
• Authorization: વપરાશકર્તા કોઈ ક્રિયા કરી શકે છે કે નહીં તે નક્કી કરવા માટે authorize method નો ઉપયોગ કરો. જો તે false રિટર્ન કરે, તો Laravel આપમેળે 403 error મોકલે છે.
• Validation: તમારી ડેટા જરૂરિયાતો વ્યાખ્યાયિત કરવા માટે rules method નો ઉપયોગ કરો.
• Data Preparation: validation ચાલતા પહેલા ડેટાને સાફ કરવા અથવા રૂપાંતરિત કરવા માટે prepareForValidation નો ઉપયોગ કરો. આ slugs જનરેટ કરવા અથવા ફોન નંબરને normalize કરવા માટે ઉત્તમ છે.
એકવાર તમે આ logic ખસેડી લો, પછી તમારું controller નાનું થઈ જશે. તે કંઈક આવું દેખાઈ શકે છે:
public function store(StorePostRequest $request) { $post = Post::create($request->validated()); return redirect()->route('posts.show', $post); }
બસ આટલું જ. બે લાઇન.
Controller હળવું (lean) રહે છે કારણ કે Laravel method શરૂ થાય તે પહેલાં જ validation અને authorization ચલાવે છે. જો ડેટા ખોટો હોય, તો વપરાશકર્તાને તરત જ error મળે છે.
એક સાવચેતીનો શબ્દ. બધી વસ્તુઓ માટે Form Requests નો ઉપયોગ કરશો નહીં. જો તમારી પાસે એક સાદા field વાળો નાનો route હોય, તો validation inline રાખો. જ્યારે logic વધે, પુનરાવર્તિત થાય અથવા permissions સાથે જોડાયેલ હોય ત્યારે Form Requests નો ઉપયોગ કરો.
ઉપરાંત, Form Request માં business logic ન મૂકો. Calculations અને database updates Service layer માં હોવા જોઈએ.
આજે જ તમારું સૌથી વધુ ગડબડવાળું 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
