તમારું Controller ખોટું કામ કરી રહ્યું છે

તમારું controller ખોલો. store method શોધો.

શું તેમાં 40 લાઇનોનો કોડ છે? શું તમે એક મોટો validation બ્લોક, અનેક if સ્ટેટમેન્ટ્સ, business logic અને પછી return સ્ટેટમેન્ટ જુઓ છો?

તમારું controller એવું કામ કરી રહ્યું છે જે તેણે ન કરવું જોઈએ.

Controller પાસે એક જ કામ છે. તે એક request મેળવે છે, સમસ્યા ઉકેલવા માટે service ને કોલ કરે છે, અને response પરત કરે છે. તે વેઈટર છે, શેફ નથી.

જ્યારે તમે controller ની અંદર validation અને authorization મૂકો છો, ત્યારે તે ગડબડ (mess) બની જાય છે. અંતે તમારી પાસે 80 લાઇનોનો કોડ હોય છે જેને કોઈ સ્પર્શવા માંગતું નથી.

Laravel પાસે એક ઇન-બિલ્ટ (built-in) ઉકેલ છે: Form Requests.

એક સામાન્ય ખરાબ પેટર્ન આ મુજબ દેખાય છે:

  • ઇનપુટ ડેટાનું validation કરવું
  • યુઝર પરમિશન ચેક કરવી
  • ડેટાને ટ્રાન્સફોર્મ કરવો
  • business logic ચલાવવું

આ Single Responsibility Principle ને તોડે છે. એક class પાસે બદલાવા માટે માત્ર એક જ કારણ હોવું જોઈએ. જ્યારે request flow બદલાય ત્યારે controller બદલાય છે. માત્ર validation rule બદલાવાને કારણે તે બદલાવું જોઈએ નહીં.

તેને સુધારવા માટે આ command નો ઉપયોગ કરો: php artisan make:request StorePostRequest

આ તમારા request logic માટે એક સમર્પિત (dedicated) ફાઇલ બનાવે છે. આ ત્રણ વસ્તુઓને Form Request માં ખસેડો:

  • Authorization: પરમિશન ચેક કરવા માટે authorize() method નો ઉપયોગ કરો.
  • Validation: તમારી ડેટા જરૂરિયાતો વ્યાખ્યાયિત કરવા માટે rules() method નો ઉપયોગ કરો.
  • Data Preparation: validation પહેલા ડેટાને સાફ કરવા અથવા format કરવા માટે prepareForValidation() નો ઉપયોગ કરો.

હવે ફરીથી તમારા controller ને જુઓ:

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

Controller હવે માત્ર બે લાઇનોનું છે. તે ફરીથી વેઈટરની જેમ કામ કરે છે.

Laravel controller method શરૂ થાય તે પહેલાં જ authorization અને validation આપમેળે ચલાવે છે. જો validation નિષ્ફળ જાય, તો યુઝરને તરત જ error મળે છે.

આ માર્ગદર્શિકા (guidelines) અનુસરો:

  • જો validation ટૂંકું હોય અને માત્ર એક જ જગ્યાએ વપરાતું હોય, તો તેને inline રાખો.
  • જો 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