CodeIgniter4:喜欢或不喜欢的功能允许两者都可以限制每个用户的一票
我正在尝试在我的图像上传站点中实现类似或不喜欢的(Undislike)功能。我正在使用Ajax来实现这一目标,到目前为止,我已经能够将用户限制在每个上传页面的一个视图中,但是我无法将用户限制为“喜欢或不喜欢”的一票。他们目前可以做。
问题在于我的Model ActionModel.php中:
public function insertAction(array $request)
{
$image = new \App\Entities\Image();
$request = $this->updateModified($request);
switch($request['action']) {
case 'dislike':
$data = [
'action' => 0,
'username' => session()->get('username'),
'viewkey' => $request['viewkey'],
'modified_at' => $request['modified_at'],
];
$image->setUserLiked($request['viewkey']);
if ($image->userLiked === FALSE) {
$this->builder()
->insert($data);
} else {
$this->builder()
->set($data)
->where(['action' => 1, 'username' => $data['username'], 'viewkey' => $data['viewkey']])
->replace();
}
unset($image->setUserLiked);
break;
case 'undislike':
$this->builder()
->where('action', 0)
->delete();
break;
case 'like':
$data = [
'action' => 1,
'username' => session()->get('username'),
'viewkey' => $request['viewkey'],
'modified_at' => $request['modified_at'],
];
$image->setUserDisliked($request['viewkey']);
if ($image->userDisliked === FALSE) {
$this->builder()
->insert($data);
} else {
$this->builder()
->set($data)
->where(['action' => 0, 'username' => $data['username'], 'viewkey' => $data['viewkey']])
->replace();
}
unset($image->userDisliked);
break;
case 'unlike':
$this->builder()
->where('action', 1)
->delete();
break;
case 'view':
$data = [
'action' => 2,
'username' => session()->get('username'),
'viewkey' => $request['viewkey'],
'modified_at' => $request['modified_at'],
];
$image->setUserViewed($request['viewkey']);
if ($image->userViewed == FALSE) {
$this->builder()
->insert($data);
} else {
$this->builder()
->set(['modified_at' => $data['modified_at']])
->where(['action' => 2, 'username' => session()->get('username'), 'viewkey' => $data['viewkey']])
->update();
}
unset($image->userViewed);
break;
case 'favorite':
$data = [
'action' => 3,
'username' => session()->get('username'),
'viewkey' => $request['viewkey'],
'modified_at' => $request['modified_at'],
];
$image->setUserFavorited($request['viewkey']);
if ($image->userFavorited === FALSE) {
$this->builder()
->insert($data);
}
unset($image->userFavorited);
break;
case 'unfavorite':
$this->builder()
->where('action', 3)
->delete();
break;
default:
break;
}
return $this->getActions($request['viewkey']);
}
public function getActions(string $viewkey)
{
$data = [];
$image = $this->imageModel->fillImageEntity($viewkey);
$image->setDislikeCount($viewkey);
$image->setLikeCount($viewkey);
$image->setViewCount($viewkey);
$image->setFavoriteCount($viewkey);
$data = [
'csrfName' => csrf_token(),
'csrfHash' => csrf_hash(),
'dislikes' => $image->dislikeCount,
'likes' => $image->likeCount,
'views' => $image->viewCount,
'favorites' => $image->favoriteCount,
];
unset($image->dislikeCount);
unset($image->likeCount);
unset($image->viewCount);
unset($image->favoriteCount);
return json_encode($data);
}
I am trying to implement a like (unlike) or dislike (undislike) feature to my image upload site. I am using AJAX to accomplish this and so far I have been able to limit users to one view of each upload page but I cannot restrict users to one vote of like OR dislike. They can do both currently.
The problem is in my model ActionModel.php:
public function insertAction(array $request)
{
$image = new \App\Entities\Image();
$request = $this->updateModified($request);
switch($request['action']) {
case 'dislike':
$data = [
'action' => 0,
'username' => session()->get('username'),
'viewkey' => $request['viewkey'],
'modified_at' => $request['modified_at'],
];
$image->setUserLiked($request['viewkey']);
if ($image->userLiked === FALSE) {
$this->builder()
->insert($data);
} else {
$this->builder()
->set($data)
->where(['action' => 1, 'username' => $data['username'], 'viewkey' => $data['viewkey']])
->replace();
}
unset($image->setUserLiked);
break;
case 'undislike':
$this->builder()
->where('action', 0)
->delete();
break;
case 'like':
$data = [
'action' => 1,
'username' => session()->get('username'),
'viewkey' => $request['viewkey'],
'modified_at' => $request['modified_at'],
];
$image->setUserDisliked($request['viewkey']);
if ($image->userDisliked === FALSE) {
$this->builder()
->insert($data);
} else {
$this->builder()
->set($data)
->where(['action' => 0, 'username' => $data['username'], 'viewkey' => $data['viewkey']])
->replace();
}
unset($image->userDisliked);
break;
case 'unlike':
$this->builder()
->where('action', 1)
->delete();
break;
case 'view':
$data = [
'action' => 2,
'username' => session()->get('username'),
'viewkey' => $request['viewkey'],
'modified_at' => $request['modified_at'],
];
$image->setUserViewed($request['viewkey']);
if ($image->userViewed == FALSE) {
$this->builder()
->insert($data);
} else {
$this->builder()
->set(['modified_at' => $data['modified_at']])
->where(['action' => 2, 'username' => session()->get('username'), 'viewkey' => $data['viewkey']])
->update();
}
unset($image->userViewed);
break;
case 'favorite':
$data = [
'action' => 3,
'username' => session()->get('username'),
'viewkey' => $request['viewkey'],
'modified_at' => $request['modified_at'],
];
$image->setUserFavorited($request['viewkey']);
if ($image->userFavorited === FALSE) {
$this->builder()
->insert($data);
}
unset($image->userFavorited);
break;
case 'unfavorite':
$this->builder()
->where('action', 3)
->delete();
break;
default:
break;
}
return $this->getActions($request['viewkey']);
}
public function getActions(string $viewkey)
{
$data = [];
$image = $this->imageModel->fillImageEntity($viewkey);
$image->setDislikeCount($viewkey);
$image->setLikeCount($viewkey);
$image->setViewCount($viewkey);
$image->setFavoriteCount($viewkey);
$data = [
'csrfName' => csrf_token(),
'csrfHash' => csrf_hash(),
'dislikes' => $image->dislikeCount,
'likes' => $image->likeCount,
'views' => $image->viewCount,
'favorites' => $image->favoriteCount,
];
unset($image->dislikeCount);
unset($image->likeCount);
unset($image->viewCount);
unset($image->favoriteCount);
return json_encode($data);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论