我正在为我的应用程序创建一个类似的功能,用户可以在其中喜欢帖子、事件、产品等。
我有一个 LikeController 和一个处理类似功能的 Trait
public function store(Post $post)
{
$post->like();
return back();
}
上面的代码是为了赞一个帖子
我不想复制代码并创建单独的函数来对事件或产品执行相同的操作,我想知道如何执行路由模型绑定并让应用程序只执行一个函数,根据什么传递模型信息被喜欢的帖子、事件或产品。
以下代码工作正常,但没有实现 DRY 原则
public function store(Post $post)
{
$post->like();
return back();
}
public function store_event(Event $event)
{
$event->like();
return back();
}
以下是特征
trait LikeTrait
{
public function getLikesCountAtrribute()
{
return $this->likes->count();
}
public function like()
{
if (!$this->likes()->where(['user_id' => auth()->id()])->exists()) {
$this->likes()->create(['user_id' => auth()->id()]);
}
}
public function likes()
{
return $this->morphMany(Like::class, 'likeable');
}
public function isLiked()
{
return !!$this->likes->where('user_id', auth()->id())->count();
}
}
我的网络路由文件如下
Route::post('post/{post}/likes', 'LikeController@store');
Route::post('event/{event}/likes', 'LikeController@store_event');
所以我想要的结果是调用相同的方法并传递相关的模型。
提前致谢