നിങ്ങളുടെ കൺട്രോളർ അമിതമായി ജോലി ചെയ്യുന്നു

നിങ്ങളുടെ കൺട്രോളർ തുറക്കുക. അതിലെ store മെത്തേഡ് പരിശോധിക്കുക.

അതിൽ 40 വരി കോഡുണ്ടോ? വലിയൊരു വാലിഡേഷൻ ബ്ലോക്കിൽ തുടങ്ങി, തുടർന്ന് നിരവധി if സ്റ്റേറ്റ്‌മെന്റുകൾ, പിന്നെ ബിസിനസ് ലോജിക്, അവസാനം ഒരു return എന്നിവയാണോ ഉള്ളത്?

നിങ്ങളുടെ കൺട്രോളർ അതിന്റെ ജോലിയല്ലാത്ത കാര്യങ്ങൾ ചെയ്യുന്നു.

ഒരു കൺട്രോളറിന് ലളിതമായ ഒരു ചുമതല മാത്രമേയുള്ളൂ. അത് ഒരു റിക്വസ്റ്റ് സ്വീകരിക്കുന്നു, പ്രശ്നം പരിഹരിക്കാൻ ഒരു സർവീസിനെ വിളിക്കുന്നു, തുടർന്ന് ഒരു റെസ്പോൺസ് നൽകുന്നു. ഇതിനെ ഒരു വെയിറ്ററോട് ഉപമിക്കാം. ഒരു വെയിറ്റർ നിങ്ങളുടെ ഭക്ഷണം എത്തിച്ചുതരുന്നു, പക്ഷേ അവർ അത് പാകം ചെയ്യുന്നില്ല.

വാലിഡേഷൻ, ഓതറൈസേഷൻ, ഡാറ്റാ പ്രോസസ്സിംഗ് എന്നിവ കൺട്രോളറിനുള്ളിൽ തന്നെ വെക്കുമ്പോൾ അത് കുഴപ്പത്തിലാകുന്നു. ആരും തൊടാൻ ആഗ്രഹിക്കാത്ത 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);
}

ഇത്രമാത്രം. വെറും രണ്ട് വരികൾ.

മെത്തേഡ് തുടങ്ങുന്നതിന് മുമ്പ് തന്നെ 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