Laravel 13 اب آپ کو $table، $fillable اور $casts جیسی پراپرٹیز کو، جو زیادہ تر ماڈلز میں جگہ گھیرتی ہیں، نیٹیو PHP attributes سے بدلنے کی اجازت دیتا ہے۔ یہ تبدیلی فریم ورک کے ایک درجن سے زیادہ فیچرز پر لاگو ہوتی ہے، ماڈل کنفیگریشن سے لے کر ایونٹ لسنرز اور میلیبلز (mailables) تک، اور یہ موجودہ کوڈ کو خراب کیے بغیر کام کرتی ہے۔
Laravel نے نیٹیو attributes کیوں شامل کیے
Laravel طویل عرصے سے "magic strings" پر انحصار کرتا آیا ہے – یعنی کالم کے ناموں یا چھپے ہوئے فیلڈز کے ایسے ارے (arrays) جو ماڈل کلاس کے اوپری حصے میں ہوتے ہیں۔ وہ ارے IDE کو بنیادی اسکیما (schema) کے بارے میں کوئی اشارہ نہیں دیتے، اس لیے کالم کا نام تبدیل (refactor) کرنے پر وہ نظر انداز ہو سکتا ہے۔ کنفیگریشن کو اصل، ٹائپ شدہ کوڈ (typed code) میں منتقل کر کے، Laravel ڈویلپرز کو کلاس باڈی کو بزنس لاجک پر مرکوز رکھنے کا طریقہ فراہم کرتا ہے، جبکہ ایڈیٹر کو آٹو کمپلیٹ، ٹائپ چیکنگ اور ری نیم-ریفیکٹر (rename-refactor) ٹولز فراہم کرنے کی اجازت دیتا ہے۔
فریم ورک PHP کے reflection API کے ذریعے attributes کو پڑھتا ہے اور نتیجہ کیش (cache) کر لیتا ہے، اس لیے رن ٹائم اوور ہیڈ (runtime overhead) مؤثر طور پر صفر ہے۔ موجودہ پراپرٹی پر مبنی ماڈلز بالکل اسی طرح کام کرتے رہتے ہیں جیسے وہ آج کرتے ہیں، جس کا مطلب ہے کہ آپ نئی سنٹیکس کو بتدریج اپنا سکتے ہیں۔
آپ کو کیا فائدہ ہوگا
- Typed configuration – Attributes ٹائپ شدہ آرگومنٹ (typed arguments) قبول کرتے ہیں، جس سے magic strings کا خاتمہ ہوتا ہے۔ کالم کا نام تبدیل کریں اور IDE آپ کو ہر اس جگہ کی نشاندہی کرے گا جہاں آپ کو اسے اپ ڈیٹ کرنے کی ضرورت ہے۔
- Cleaner class bodies – تمام کنفیگریشن کلاس کے نام کے اوپر ہوتی ہے؛ باڈی میں صرف ریلیشن شپ (relationships)، اسکوپس (scopes) اور میتھڈز (methods) ہوتے ہیں۔
- Better IDE experience – آٹو کمپلیٹ اور اسٹیٹک اینالیسس (static analysis) attribute arguments پر کام کرتے ہیں، جو کہ اسٹرنگز کے ارے (arrays of strings) فراہم نہیں کر سکتے۔
- No breaking changes – Laravel پرانی پراپرٹیز اور نئے attributes دونوں کو پڑھتا ہے، اس لیے مکسڈ کوڈ بیس بغیر کسی مسئلے کے چلتا ہے۔
مرحلہ وار مائیگریشن گائیڈ
مائیگریٹ کرنے کے لیے ماڈل کی شناخت کریں
ماڈل فائل کھولیں۔ اگر پہلی درجن لائنوں پر$table،$fillable،$hiddenیاcasts()میتھڈ کا غلبہ ہے، تو یہ ایک امیدوار ہے۔Attribute classes شامل کریں
فائل کے اوپری حصے میں، ان attribute classes کو امپورٹ کریں جو ان پراپرٹیز کے مطابق ہوں جنہیں آپ تبدیل کریں گے (مثلاًTable,Fillable,Casts)۔ Laravel یہ attributes پہلے سے فراہم کرتا ہے۔Property declarations کو attributes سے بدلیں
// Before protected $table = 'site_deployments'; protected $fillable = ['site_id', 'server_id', 'status']; protected function casts(): array { return ['is_rollback' => 'boolean']; }// After #[Table('site_deployments')] #[Fillable(['site_id', 'server_id', 'status'])] #[Casts(['is_rollback' => 'boolean'])] class Deployment extends Model { // business logic only }Attribute سنٹیکس براہ راست کلاس ڈیکلریشن کے اوپر ہوتی ہے۔ اس بات کی تصدیق کرنے کے بعد کہ attribute کام کر رہا ہے، اصل پراپرٹی یا میتھڈ کو ہٹا دیں۔
ٹیسٹ سویٹ (test suite) چلائیں
تصدیق کریں کہ mass-assignment، سیریلائزیشن (serialization) اور کوئی بھی کسٹم کاسٹنگ (custom casting) پہلے کی طرح ہی کام کر رہی ہے۔ Laravel کا attribute ہینڈلنگ کیش (cache) ہوتا ہے، اس لیے اگر کوئی ٹیسٹ فیل ہوتا ہے تو عام طور پر یہ attribute arguments میں ٹائپو (typo) کی طرف اشارہ کرتا ہے۔چھوٹے بیچز (batches) میں کمٹ اور ڈیپلائے کریں
مائیگریٹ شدہ ماڈل کو فیچر برانچ پر پش کریں، CI پائپ لائن پاس ہونے کے بعد اسے مرج کریں، اور اسے سرورز کے ایک مخصوص حصے پر رول آؤٹ کریں۔ چونکہ پرانی پراپرٹی سنٹیکس اب بھی سپورٹڈ ہے، اس لیے کوئی بھی غلط حوالہ (stray reference) رن ٹائم ایرر کا باعث نہیں بنے گا۔ہر نیم اسپیس (namespace) کے لیے دہرائیں
پورے کوڈ بیس کو ایک ساتھ دوبارہ لکھنے کے بجائے، ماڈلز کے ایک منطقی گروپ (مثلاً تمام بلنگ سے متعلقہ entities) کو attributes پر منتقل کریں، پھر اگلے گروپ کے لیے یہی عمل دہرائیں۔ یہ کسی بھی ریگریشن (regression) کے اثر کو محدود رکھتا ہے۔
ٹولز اور حفاظتی نیٹ ورک (safety nets)
- Rector – ایک خودکار ریفیکٹورنگ ٹول جو بار بار استعمال ہونے والی پراپرٹی سنٹیکس کو attributes میں تبدیل کر سکتا ہے۔ اسے کوڈ بیس کی ایک کاپی پر چلائیں، فرق (diff) کا جائزہ لیں، اور وہ تبدیلیاں لاگو کریں جو درست نظر آتی ہیں۔
- Automated tests – Laravel کی بلٹ ان ٹیسٹنگ یوٹیلیٹیز mass-assignment اور JSON آؤٹ پٹ میں فرق کو پکڑ لیتی ہیں۔ ہر مائیگریشن مرحلے کے بعد انہیں 'گرین' (pass) رکھیں۔
- Feature flags – اگر آپ کو تیزی سے رول بیک کرنے کی ضرورت ہے، تو نئے attribute کے استعمال کو ایک فلیگ کے پیچھے رکھیں جو پرانی اور نئی کنفیگریشن کے درمیان سوئچ کر سکے۔
آپ مائیگریشن کب چھوڑ سکتے ہیں
اگر کوئی پروجیکٹ چھوٹا، مستحکم اور شاذ و نادر ہی تبدیل کیا جاتا ہے، تو صاف ستھرے ماڈلز کا فائدہ تبدیلی کی کوشش سے زیادہ نہیں ہو سکتا۔ Attribute سنٹیکس اختیاری ہے؛ آپ کلاسیکی پراپرٹی اپروچ کا استعمال لامحدود جاری رکھ سکتے ہیں۔ اس کے برعکس، فعال طور پر تیار کیے جانے والے ایپلی کیشنز کے لیے، خاص طور پر وہ جن کے ماڈلز بڑے ہوں یا اسکیما میں بار بار تبدیلیاں آتی ہوں، attributes کو جلد اپنانا مستقبل کی مشکلات کو کم کرتا ہے۔
آگے کیا دیکھنا ہے
Laravel 13 کی attribute سپورٹ ماڈلز سے آگے ایونٹ لسنرز، نوٹیفیکیشنز، میلیبلز اور براڈکاسٹ ایونٹس تک پھیلی ہوئی ہے۔ جیسے جیسے کمیونٹی ان شعبوں میں اس سنٹیکس کو اپنائے گی، اسی طرح کے ریفیکٹورنگ پیٹرنز سامنے آئیں گے۔ مستقبل کے مائنر ریلیز میں آنے والے کسی بھی نئے attribute classes کے لیے آفیشل اپ گریڈ گائیڈ پر نظر رکھیں۔
خلاصہ: Laravel 13 آپ کو مزید سادہ اور IDE کے لیے زیادہ موزوں ماڈلز کی طرف ایک بغیر کسی اضافی لاگت والا راستہ فراہم کرتا ہے۔ ایک وقت میں ایک namespace تبدیل کریں، Rector اور اپنے test suite کا سہارا لیں، اور آپ کے پاس ایسی کلاسز ہوں گی جو کنفیگریشن ڈمپ فائلوں کے بجائے کاروباری وضاحتوں (business specifications) کی طرح پڑھنے میں آئیں گی۔
