ممکنه بخواید برای یکی از کلاس های خود لاراول متدی اضافه کنید طبیعتا رفتن و اضافه کردنشش به سورس کد خود لاراول کار منطقی ای نیست تو این موقعیت میتونید از macro ها استفاده کنید
در واقع کلاس های لاراول یه متد macro دارن که دوتا آرگیومنت میگیره اولی اسم متدی که میخوایم اضافه کنیم و دومی یه تابع که بدنه متد رو تشکیل میده
حالا چطور ماکرو هارو تعریف کنیم و ازشون استفاده کنیم ؟ برای اینکار میتونید ماکرو رو توی بوت AppServiceProvider تعریف کنید یا نه برای اینکه پروژتون تمیز تر باشه یه پروایدر مخصوص برای ماکرو ها بسازید
برای مثال ما میخوایم یه متد even برای کلاس Collection بسازیم تا بیاد اعضای زوج کالکشن رو برگردونه برای اینکار توی متود boot میاییم و ماکرو رو به این صورت تعریف میکنیم :
use Illuminate\Support\Collection;
public function boot()
{
Collection::macro('even', function () {
return $this->filter(function ($value) {
return $value % 2 === 0;
});
});
}
حالا هرجا بخوایم میتویم کلاس Collection رو use کنیم و از متد even استفاده کنیم :
php
$numbers = collect([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
$evenNumbers = $numbers->even();
// $evenNumbers will now contain [2, 4, 6, 8, 10]
برای درک بهتر میتونید این مقاله از دیتی رو هم بخونید
https://ditty.ir/posts/laravel-macro/J6dqn
#Laravel #php
@CleverDevs - @CleverDevsGp