ਤੁਹਾਡਾ Controller ਬਹੁਤ ਜ਼ਿਆਦਾ ਕੰਮ ਕਰ ਰਿਹਾ ਹੈ

ਆਪਣਾ controller ਖੋਲ੍ਹੋ। ਆਪਣੇ store method ਨੂੰ ਦੇਖੋ।

ਕੀ ਇਸ ਵਿੱਚ 40 ਲਾਈਨਾਂ ਦਾ ਕੋਡ ਹੈ? ਕੀ ਇਹ ਇੱਕ ਵੱਡੇ validation block ਨਾਲ ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ, ਫਿਰ ਕਈ if statements, ਫਿਰ business logic, ਅਤੇ ਅੰਤ ਵਿੱਚ ਇੱਕ return?

ਤੁਹਾਡਾ controller ਉਹ ਕੰਮ ਕਰ ਰਿਹਾ ਹੈ ਜੋ ਉਸਦਾ ਕੰਮ ਨਹੀਂ ਹੈ।

ਇੱਕ controller ਦੀ ਇੱਕ ਸਧਾਰਨ ਭੂਮਿਕਾ ਹੁੰਦੀ ਹੈ। ਇਹ ਇੱਕ request ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ, ਸਮੱਸਿਆ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਇੱਕ service ਨੂੰ ਕਾਲ ਕਰਦਾ ਹੈ, ਅਤੇ ਇੱਕ response ਵਾਪਸ ਕਰਦਾ ਹੈ। ਇਸਨੂੰ ਇੱਕ ਵੇਟਰ ਵਾਂਗ ਸਮਝੋ। ਇੱਕ ਵੇਟਰ ਤੁਹਾਡਾ ਖਾਣਾ ਲੈ ਕੇ ਆਉਂਦਾ ਹੈ। ਉਹ ਇਸਨੂੰ ਪਕਾਉਂਦਾ ਨਹੀਂ ਹੈ।

ਜਦੋਂ ਤੁਸੀਂ validation, authorization, ਅਤੇ data processing ਨੂੰ ਇੱਕ controller ਦੇ ਅੰਦਰ ਰੱਖਦੇ ਹੋ, ਤਾਂ ਇਹ ਇੱਕ ਖਿਲਾਰਾ ਬਣ ਜਾਂਦਾ ਹੈ। ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ 80-ਲਾਈਨਾਂ ਦਾ ਅਜਿਹਾ ਮਾਨਸਟਰ ਬਣ ਜਾਂਦਾ ਹੈ ਜਿਸ ਨੂੰ ਕੋਈ ਵੀ ਛੂਹਣਾ ਨਹੀਂ ਚਾਹੁੰਦਾ।

Laravel ਕੋਲ ਇੱਕ built-in ਹੱਲ ਹੈ: Form Requests।

ਹਰ method ਵਿੱਚ validation ਅਤੇ authorization logic ਨੂੰ ਦੁਹਰਾਉਣਾ ਬੰਦ ਕਰੋ। Single Responsibility Principle ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇੱਕ class ਦੇ ਬਦਲਣ ਦਾ ਸਿਰਫ਼ ਇੱਕ ਹੀ ਕਾਰਨ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਇੱਕ controller ਉਦੋਂ ਬਦਲਦਾ ਹੈ ਜਦੋਂ request flow ਬਦਲਦਾ ਹੈ। ਇਸਨੂੰ ਸਿਰਫ਼ ਇਸ ਲਈ ਨਹੀਂ ਬਦਲਣਾ ਚਾਹੀਦਾ ਕਿਉਂਕਿ ਇੱਕ validation rule ਬਦਲ ਗਿਆ ਹੈ।

ਇੱਕ ਸਮਰਪਿਤ request class ਬਣਾਉਣ ਲਈ ਇਹ command ਚਲਾਓ: php artisan make:request StorePostRequest

ਆਪਣਾ logic ਇਸ ਨਵੀਂ class ਵਿੱਚ ਲੈ ਜਾਓ। ਇੱਕ Form Request ਤਿੰਨ ਮੁੱਖ ਚੀਜ਼ਾਂ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ:

• Authorization: ਇਹ ਫੈਸਲਾ ਕਰਨ ਲਈ ਕਿ ਕੀ ਕੋਈ user ਕੋਈ action ਕਰ ਸਕਦਾ ਹੈ, authorize method ਦੀ ਵਰਤੋਂ ਕਰੋ। ਜੇਕਰ ਇਹ false ਵਾਪਸ ਕਰਦਾ ਹੈ, ਤਾਂ Laravel ਆਪਣੇ ਆਪ 403 error ਭੇਜ ਦਿੰਦਾ ਹੈ।

• Validation: ਆਪਣੀਆਂ data requirements ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਨ ਲਈ rules method ਦੀ ਵਰਤੋਂ ਕਰੋ।

• Data Preparation: validation ਚੱਲਣ ਤੋਂ ਪਹਿਲਾਂ data ਨੂੰ ਸਾਫ਼ ਕਰਨ ਜਾਂ ਬਦਲਣ ਲਈ prepareForValidation ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ slugs ਬਣਾਉਣ ਜਾਂ phone numbers ਨੂੰ normalize ਕਰਨ ਲਈ ਬਿਲਕੁਲ ਸਹੀ ਹੈ।

ਇੱਕ ਵਾਰ ਜਦੋਂ ਤੁਸੀਂ ਇਹ logic ਬਦਲ ਲੈਂਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡਾ controller ਛੋਟਾ ਹੋ ਜਾਂਦਾ ਹੈ। ਇਹ ਇਸ ਤਰ੍ਹਾਂ ਦਿਖ ਸਕਦਾ ਹੈ:

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

ਬੱਸ ਇੰਨਾ ਹੀ। ਦੋ ਲਾਈਨਾਂ।

Controller ਹਲਕਾ ਰਹਿੰਦਾ ਹੈ ਕਿਉਂਕਿ Laravel method ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਹੀ validation ਅਤੇ authorization ਚਲਾ ਦਿੰਦਾ ਹੈ। ਜੇਕਰ data ਗਲਤ ਹੈ, ਤਾਂ user ਨੂੰ ਤੁਰੰਤ error ਮਿਲ ਜਾਂਦਾ ਹੈ।

ਇੱਕ ਸਾਵਧਾਨੀ ਦੀ ਗੱਲ। ਹਰ ਚੀਜ਼ ਲਈ Form Requests ਦੀ ਵਰਤੋਂ ਨਾ ਕਰੋ। ਜੇਕਰ ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਸਧਾਰਨ field ਵਾਲਾ ਇੱਕ ਛੋਟਾ ਜਿਹਾ route ਹੈ, ਤਾਂ validation ਨੂੰ inline ਹੀ ਰੱਖੋ। Form Requests ਦੀ ਵਰਤੋਂ ਉਦੋਂ ਕਰੋ ਜਦੋਂ logic ਵਧਦਾ ਹੈ, ਦੁਹਰਾਇਆ ਜਾਂਦਾ ਹੈ, ਜਾਂ ਇਸ ਵਿੱਚ permissions ਸ਼ਾਮਲ ਹੁੰਦੀਆਂ ਹਨ।

ਇਸ ਤੋਂ ਇਲਾਵਾ, Form Request ਵਿੱਚ business logic ਨਾ ਰੱਖੋ। Calculations ਅਤੇ database updates Service layer ਵਿੱਚ ਹੋਣੇ ਚਾਹੀਦੇ ਹਨ।

ਅੱਜ ਹੀ ਆਪਣਾ ਸਭ ਤੋਂ ਵੱਧ ਖਿਲਾਰਾ ਵਾਲਾ controller ਲੱਭੋ। Validation ਨੂੰ Form Request ਵਿੱਚ ਕੱਢੋ। ਦੇਖੋ ਕਿ ਇਹ ਕਿਵੇਂ ਛੋਟਾ ਹੋ ਜਾਂਦਾ ਹੈ।

ਤੁਸੀਂ ਹੁਣ ਤੱਕ ਦਾ ਸਭ ਤੋਂ ਵੱਡਾ store method ਕਿਹੜਾ ਦੇਖਿਆ ਹੈ? ਮੈਨੂੰ comment ਵਿੱਚ ਦੱਸੋ।

Source: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o