🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ AradTk
استفاده از یک روت برای لایک و دیسلایک
جامعه لاراول ایجاد شده در ۰۴ مرداد ۱۴۰۲

سلام من اومدم لایک و دیسلایک رو با یک روت هندل کردم

آیا اینکار بهینه‌تر نیست تا اینکه واسه لایک و دیسلایک روت‌های جداگانه لحاظ بشه

//web.php
Route::get('{likeable_type}/{likeable_id}/{vote}' , [LikeController::class , 'store'])->name('likes.store');
//likeController

class LikeController extends Controller
{
    public function store( Request $request , string $likeable_type , string $likeable_id ,int $vote) {
        $model_name = 'App\\\\Models\\\\'.ucfirst($likeable_type);
        $route_keyName = (new $model_name)->getRouteKeyName();
        $likeable = $model_name::where($route_keyName , $likeable_id)->firstOrFail();
        $likeable->likes()->create(['user_id' => auth()->id() , 'vote' => $vote]);
        return back();
    }
}

سلام، بله میشه این کار رو هم انجام داد.
در مجموع در برنامه نویسی شما برای حل یک مساله ممکنه از راههای زیادی بتونید استفاده کنید.

در مورد این کدی که الان مطرح کردید، راه حل شما داره کار میکنه ولی اصل single responsibility که اولین اصل از اصول SOLID هست نقض شده.
این اصل به این موضوع اشاره داره که هر متد، کلاس یا ماژول در برنامه باید وظیفه یک کار رو داشته باشه و تنها یک دلیل برای تغییر داشته باشن.
متد store اینجا داره دو تا کار رو انجام میده، هم عمل لایک کردن رو انجام میده، و هم دیسلایک کردن رو.
پس بهتره این دو وظیفه به دو متد مجزا و یا حتی دوتا کلاس مجزا که اینجا کنترلرهامون هستن، محول بشه.

امیدوارم که تونسته باشم کمک کرده باشم.
اگر سوالی بود، در خدمتم.

پویا پارسایی ۰۶ مهر ۱۴۰۲، ۱۷:۵۶