آپ کا کنٹرولر ضرورت سے زیادہ کام کر رہا ہے

اپنا کنٹرولر کھولیں۔ اپنے store میتھڈ کو دیکھیں۔

کیا اس میں 40 لائنوں کا کوڈ ہے؟ کیا یہ ایک بڑے ویلیڈیشن بلاک سے شروع ہوتا ہے، جس کے بعد کئی if سٹیٹمنٹس، پھر بزنس لاجک، اور آخر میں ایک return ہے؟

آپ کا کنٹرولر وہ کام کر رہا ہے جو اس کا کام نہیں ہے۔

ایک کنٹرولر کا ایک سادہ سا کردار ہوتا ہے۔ یہ ایک ریکویسٹ وصول کرتا ہے، مسئلہ حل کرنے کے لیے کسی سروس کو کال کرتا ہے، اور ایک رسپانس واپس کرتا ہے۔ اسے ایک ویٹر کی طرح سمجھیں۔ ایک ویٹر آپ کے لیے کھانا لاتا ہے۔ وہ اسے پکاتا نہیں ہے۔

جب آپ ویلیڈیشن، اتھارائزیشن، اور ڈیٹا پروسیسنگ کو کنٹرولر کے اندر رکھتے ہیں، تو یہ ایک الجھن بن جاتا ہے۔ آپ کے پاس 80 لائنوں کا ایک ایسا دیو ہیکل کوڈ (monster) بچ جاتا ہے جسے کوئی چھونا بھی نہیں چاہتا۔

Laravel میں اس کا ایک بلٹ ان (built-in) حل موجود ہے: Form Requests۔

ہر میتھڈ میں ویلیڈیشن اور اتھارائزیشن لاجک کو بار بار دہرانا بند کریں۔ Single Responsibility Principle کا استعمال کریں۔ ایک کلاس کے پاس تبدیل ہونے کی صرف ایک ہی وجہ ہونی چاہیے۔ کنٹرولر تب بدلتا ہے جب ریکویسٹ کا بہاؤ (flow) بدلتا ہے۔ اسے صرف اس لیے نہیں بدلنا چاہیے کہ ویلیڈیشن کا کوئی رول بدل گیا ہے۔

ایک مخصوص ریکویسٹ کلاس بنانے کے لیے یہ کمانڈ چلائیں: php artisan make:request StorePostRequest

اپنی لاجک کو اس نئی کلاس میں منتقل کریں۔ ایک Form Request تین اہم چیزیں سنبھالتی ہے:

• Authorization: یہ فیصلہ کرنے کے لیے کہ آیا صارف کوئی ایکشن انجام دے سکتا ہے یا نہیں، authorize میتھڈ کا استعمال کریں۔ اگر یہ false واپس کرتا ہے، تو Laravel خود بخود 403 error بھیج دیتا ہے۔

• 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 کا استعمال تب کریں جب لاجک بڑھے، بار بار دہرائی جائے، یا اس میں پرمیشنز (permissions) شامل ہوں۔

اس کے علاوہ، Form Request میں بزنس لاجک نہ ڈالیں۔ کیلکولیشنز اور ڈیٹا بیس اپ ڈیٹس کا تعلق Service layer سے ہے۔

آج ہی اپنا سب سے زیادہ الجھا ہوا کنٹرولر تلاش کریں۔ ویلیڈیشن کو نکال کر Form Request میں منتقل کریں۔ اسے چھوٹا ہوتے ہوئے دیکھیں۔

آپ نے اب تک کا سب سے بڑا store میتھڈ کون سا دیکھا ہے؟ مجھے کمنٹس میں بتائیں۔

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