سلام چند ماه بود میخواستم این پست رو منتشر کنم اما فرصتش پیش نمیومد. معمولا توی تمام پروژه هامون پیش میاد که یه زیر ساختی رو اول توسعه ی پروژه تعریف میکنیم و بعد در طی روند توسعه، کد نویسی در قالب اون زیرساخت انجام میشه. این زیرساخت بسته به پروژه و نبوغ و دانش فنی تیم میتونه متفاوت باشه. اما خب معمولا توی اکثر پروژه ها ما یه BaseClass برای کلاس های مختلفمون میسازیم. مثلا من خودم همیشه اولین کاری که میکنم اینه که یه BaseModel ، BaseController ، BaseRequest و. میسازم و تمام کلاس ها رو از این اجزا اکستند میکنم. ممکنه حتی اول کار این کلاس ها خالی باشن ولی قطعا بعد از مدتی ممکنه یه متد ها یا پراپرتی های مشترکی بین تمام کنترلر ها، مدل ها و. نیاز بشه. بعد از این باید به تمام اعضای تیم توضیح بدم که تمام مدل ها باید به جای کلاس Model از BaseModel اکستند بشه و به همین طریق کنترلر ها و. خب این موضوع یه کار روتین به اعضای تیم تحمیل میکنه. همون طور که میدونید مثلا تمام مدل های لاراول به صورت پیش فرض از کلاسی به نام Illuminate Database Eloquent Model اسکتند میشه. خب ما میخوایم از BaseModel اکستند بشه به جای این کلاس! خب یه راه خسته کننده و روتین اینه که باید به صورت دستی بریم و از کلاس خودمون اکستند کنیم. خب ممکنه مشکلاتی مثل اشتباه یا فراموشی پیش بیاد! شاید براتون سوال پیش اومده باشه که وقتی دستور رو توی ترمینال میزنید artisan چطوری ساختار کد مدل Foo رو میسازه و شاید دوست داشته باشید محتوای اجزای تولید شده رو وقتی با این دستور کار میکنید اختصاصی کنید. لاراول برای ساخت اجزایی که با دستور make آرتیسان تولید میشن، از قالب‌هایی با نام stub الگو برداری میکنه. یعنی مثلا برای ایجاد مدل یک فایل متنی به نام model . stub وجود داره که لاراول برای ساخت هر مدل دقیقا از محتویات این فایل استفاده میکنه. حالا هر محتوایی که داخل این فایل باشه رو توی کلاسی که ساختید هم هست. در واقع stub ها یه الگو هستن این امکان توی نسخه های قبلی لاراول هم بوده اما به صورت داخلی استفاده میشده و امکان ویرایش اونها برای دولوپر ها وجود نداشته به این سادگی ها. اما از نسخه به بعد این امکان فراهم شد که به راحتی بتونیم این الگوها رو کاستومایز کنیم. چی ازین بهتر! برای اینکه بتونید محتوای استاب ها رو ویرایش کنید از دستور زیر استفاده کنید: بعد از اجزای این دستور توی روت پروژه دایرکتوری به نام stubs ساخته میشه که فایل های مختلفی با پسوند. stub وجود داره. همه چیز به همین راحتی قابل تغییر هست!