உங்கள் Controller தவறான வேலையைச் செய்கிறது

உங்கள் controller-ஐத் திறக்கவும். ஒரு store method-ஐத் தேடவும்.

அதில் 40 வரிகள் குறியீடு (code) உள்ளதா? ஒரு பெரிய validation block, பல if statements, business logic மற்றும் இறுதியில் ஒரு return statement ஆகியவற்றைக் காண்கிறீர்களா?

உங்கள் controller செய்யக்கூடாத வேலையைச் செய்கிறது.

ஒரு controller-க்கு ஒரே ஒரு வேலைதான் உண்டு. அது ஒரு request-ஐப் பெற்றுக்கொண்டு, அந்தப் பிரச்சனையைத் தீர்க்க ஒரு service-ஐ அழைத்து, ஒரு response-ஐத் திருப்பித் தரும். அது ஒரு வெயிட்டர் (waiter) போன்றது, சமையல்காரர் (chef) அல்ல.

validation மற்றும் authorization ஆகியவற்றை ஒரு controller-க்குள் வைக்கும்போது, அது குழப்பமாகிவிடுகிறது. யாரும் தொட விரும்பாத 80 வரிகள் கொண்ட குறியீடாக அது மாறிவிடும்.

Laravel-இல் இதற்கென ஒரு built-in தீர்வு உள்ளது: Form Requests.

ஒரு பொதுவான தவறான முறை (bad pattern) இப்படித்தான் இருக்கும்:

  • input data-வை validation செய்தல்
  • பயனர் அனுமதிகளை (user permissions) சரிபார்த்தல்
  • தரவை மாற்றுதல் (transforming data)
  • business logic-ஐ இயக்குதல்

இது Single Responsibility Principle-ஐப் பாதிக்கிறது. ஒரு class-க்கு மாற்றம் செய்ய ஒரே ஒரு காரணம் மட்டுமே இருக்க வேண்டும். request flow மாறும்போதுதான் ஒரு controller மாற வேண்டும். ஒரு validation rule மாறுவதற்காக மட்டும் அது மாறக்கூடாது.

இதைச் சரிசெய்ய இந்த command-ஐப் பயன்படுத்தவும்: php artisan make:request StorePostRequest

இது உங்கள் request logic-க்காக ஒரு பிரத்யேகக் கோப்பை (dedicated file) உருவாக்கும். இந்த மூன்று விஷயங்களையும் Form Request-க்குள் மாற்றவும்:

  • Authorization: அனுமதிகளைச் சரிபார்க்க authorize() method-ஐப் பயன்படுத்தவும்.
  • Validation: உங்கள் தரவுத் தேவைகளை (data requirements) வரையறுக்க rules() method-ஐப் பயன்படுத்தவும்.
  • Data Preparation: validation செய்வதற்கு முன் தரவைச் சுத்தம் செய்ய அல்லது வடிவமைக்க prepareForValidation() பயன்படுத்தவும்.

இப்போது உங்கள் controller-ஐ மீண்டும் பாருங்கள்:

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

இப்போது controller இரண்டு வரிகளாகக் குறைந்துவிட்டது. அது மீண்டும் ஒரு வெயிட்டரைப் போலச் செயல்படுகிறது.

controller method தொடங்குவதற்கு முன்பே Laravel தானாகவே authorization மற்றும் validation-ஐச் செய்துவிடும். validation தோல்வியடைந்தால், பயனர் உடனடியாக ஒரு error-ஐப் பெறுவார்.

இந்த வழிகாட்டுதல்களைப் பின்பற்றவும்:

  • 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