[英]CodeIgniter 4: How do I display a gallery of image entity objects?
我有一个网站,会员可以:
因此,在我的图库视图中,所有图像都可以通过其各自的图像上传器、喜欢评级(喜欢到不喜欢的百分比)和上传日期来查看。
我创建了一个名为 Image 的实体对象类,它包含所有这些信息以及更多信息。 所以我试图找到一种方法将画廊中的所有图像作为图像对象循环。 那可能吗?
这是我的图像实体类:
class Image extends Entity
{
protected $attributes = [
'viewkey' => NULL,
'id' => NULL,
'uploader' => NULL,
'filename' => NULL,
'title' => NULL,
'tags' => NULL,
'createdAt' => NULL,
'modifiedAt' => NULL,
'likeCount' => NULL,
'dislikeCount' => NULL,
'viewCount' => NULL,
'favoriteCount' => NULL,
'commentCount' => NULL,
'rating' => NULL,
'userLiked' => NULL,
'userDisliked' => NULL,
'userViewed' => NULL,
'userFavorited' => NULL,
'userCommented' => NULL,
'userSubscribed' => NULL,
'action' => NULL,
];
protected $datamap = [
'createdAt' => 'created_at',
'modifiedAt' => 'modified_at',
];
protected $dates = ['createdAt', 'updatedAt',];
protected $casts = [
'likeCount' => 'int',
'dislikeCount' => 'int',
'viewCount' => 'int',
'favoriteCount' => 'int',
'commentCount' => 'int',
'rating' => 'float',
'userDisliked' => 'bool',
'userLiked' => 'bool',
'userViewed' => 'bool',
'userFavorited' => 'bool',
];
protected $builder;
public function __construct (array $data = NULL)
{
parent::__construct($data);
$db = \Config\Database::connect();
$this->builder = $db->table('actions');
}
/**
* Custom __set Methods
*/
public function setDislikeCount(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'action' => 0,
];
$this->attributes['dislikeCount'] = $this->builder
->where($where)
->countAllResults();
}
public function setLikeCount(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'action' => 1,
];
$this->attributes['likeCount'] = $this->builder
->where($where)
->countAllResults();
}
public function setViewCount(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'action' => 2,
];
$this->attributes['viewCount'] = $this->builder
->where($where)
->countAllResults();
}
public function setFavoriteCount(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'action' => 3,
];
$this->attributes['favoriteCount'] = $this->builder
->where($where)
->countAllResults();
}
public function setCommentCount(string $viewkey)
{
$this->attributes['commentCount'] = $this->builder
->where('viewkey', $viewkey)
->countAllResults();
}
public function setRating(string $viewkey)
{
helper('arithmetic');
$whereDislike = $whereLike = [];
$whereDislike = [
'viewkey' => $viewkey,
'action' => 0,
];
$dislikes = $this->builder
->where($whereDislike)
->countAllResults();
$whereLike = [
'viewkey' => $viewkey,
'action' => 1,
];
$likes = $this->builder
->where($whereLike)
->countAllResults();
$this->attributes['rating'] = get_percentage($likes + $dislikes, $likes, 0);
}
public function setUserDisliked(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'username' => session()->get('username'),
'action' => 0,
];
$userDisliked = $this->builder
->where($where)
->countAllResults();
if ($userDisliked === 1) {
$this->attributes['userDisliked'] = TRUE;
} else {
$this->attributes['userDisliked'] = FALSE;
}
}
public function setUserLiked(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'username' => session()->get('username'),
'action' => 1,
];
$userLiked = $this->builder
->where($where)
->countAllResults();
if ($userLiked === 1) {
$this->attributes['userLiked'] = TRUE;
} else {
$this->attributes['userLiked'] = FALSE;
}
}
public function setUserViewed(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'username' => session()->get('username'),
'action' => 2,
];
$userViewed = $this->builder
->where($where)
->countAllResults();
if ($userViewed === 1) {
$this->attributes['userViewed'] = TRUE;
} else {
$this->attributes['userViewed'] = FALSE;
}
}
public function setUserFavorited(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'username' => session()->get('username'),
'action' => 3,
];
$userFavorited = $this->builder
->where($where)
->countAllResults();
if ($userFavorited === 1) {
$this->attributes['userFavorited'] = TRUE;
} else {
$this->attributes['userFavorited'] = FALSE;
}
}
public function setUserCommented(string $subscriber)
{
$db = \Config\Database::connect();
$this->builder = $db->table('comments');
$userCommented = $this->builder
->where('commenter')
->countAllResults();
if ($userCommented === 1) {
$this->attributes['userCommented'] = TRUE;
} else {
$this->attributes['userCommented'] = FALSE;
}
}
public function setUserSubscribed(string $uploader)
{
$db = \Config\Database::connect();
$this->builder = $db->table('subscribers');
$where = [];
$where = [
'profile' => $uploader,
'subscriber' => session()->get('username'),
];
$userSubscribed = $this->builder
->where($where)
->countAllResults();
if ($userSubscribed === 1) {
$this->attributes['userSubscribed'] = TRUE;
} else {
$this->attributes['userSubscribed'] = FALSE;
}
}
/**
* Custom __get Methods
*/
}
我在这里用我的 ImageModel 中的函数填充实体:
public function fillImageEntity(string $viewkey)
{
$imageData = $this->builder()
->where('viewkey', $viewkey)
->get()
->getRowArray();
$image = new \App\Entities\Image();
$image->fill($imageData);
$image->setDislikeCount($viewkey);
$image->setLikeCount($viewkey);
$image->setViewCount($viewkey);
$image->setFavoriteCount($viewkey);
$image->setCommentCount($viewkey);
$image->setRating($viewkey);
$image->setUserDisliked($viewkey);
$image->setUserLiked($viewkey);
$image->setUserViewed($viewkey);
$image->setUserFavorited($viewkey);
$image->setUserCommented($viewkey);
$image->setUserSubscribed($imageData['uploader']);
return $image;
}
我尝试创建一个 Gallery 对象类来保存图像,然后用 Image 对象填充该对象,但我收到错误消息,您无法保留 Entity 对象数组。 这是一个逻辑错误还是我做错了?
我能够创建我的实体类 Image.php 的多维数组,并成功地在我的视图中显示必要的信息!
我在 Gallery.php 控制器中将数组传递到我的视图中:
public function index()
{
$data = [];
$data = [
'title' => 'Image Gallery',
'gallery' => $this->imageModel->getEntireGallery(),
];
echo view('templates/header', $data);
echo view('templates/navigation');
echo view('templates/filter_bar', $data);
echo view('images/gallery', $data);
echo view('templates/footer', $data);
}
我在我的模型 ImageModel.php 中填充数组和每个图像对象:
public function fillImageEntity(string $viewkey)
{
$imageData = $this->builder()
->where('viewkey', $viewkey)
->get()
->getRowArray();
$image = new \App\Entities\Image();
$image->fill($imageData);
$image->setDislikeCount($viewkey);
$image->setLikeCount($viewkey);
$image->setViewCount($viewkey);
$image->setFavoriteCount($viewkey);
$image->setCommentCount($viewkey);
$image->setRating($viewkey);
$image->setUserDisliked($viewkey);
$image->setUserLiked($viewkey);
$image->setUserViewed($viewkey);
$image->setUserFavorited($viewkey);
$image->setUserCommented($viewkey);
$image->setUserSubscribed($imageData['uploader']);
return $image;
}
public function getEntireGallery()
{
$images = $this->builder()
->orderBy('modified_at', 'DESC')
->get()
->getResultArray();
foreach ($images as $image) {
$gallery[$image['id']] = $this->fillImageEntity($image['viewkey']);
}
return $gallery;
这是我的图像实体类:
class Image extends Entity
{
protected $attributes = [
'viewkey' => NULL,
'id' => NULL,
'uploader' => NULL,
'filename' => NULL,
'title' => NULL,
'tags' => NULL,
'createdAt' => NULL,
'modifiedAt' => NULL,
'likeCount' => NULL,
'dislikeCount' => NULL,
'viewCount' => NULL,
'favoriteCount' => NULL,
'commentCount' => NULL,
'rating' => NULL,
'userLiked' => NULL,
'userDisliked' => NULL,
'userViewed' => NULL,
'userFavorited' => NULL,
'userCommented' => NULL,
'userSubscribed' => NULL,
'action' => NULL,
];
protected $datamap = [
'createdAt' => 'created_at',
'modifiedAt' => 'modified_at',
];
protected $dates = ['createdAt', 'updatedAt',];
protected $casts = [
'likeCount' => 'int',
'dislikeCount' => 'int',
'viewCount' => 'int',
'favoriteCount' => 'int',
'commentCount' => 'int',
'rating' => 'float',
'userDisliked' => 'bool',
'userLiked' => 'bool',
'userViewed' => 'bool',
'userFavorited' => 'bool',
];
protected $builder;
public function __construct (array $data = NULL)
{
parent::__construct($data);
$db = \Config\Database::connect();
$this->builder = $db->table('actions');
}
/**
* Custom __set Methods
*/
public function setDislikeCount(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'action' => 0,
];
$this->attributes['dislikeCount'] = $this->builder
->where($where)
->countAllResults();
}
public function setLikeCount(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'action' => 1,
];
$this->attributes['likeCount'] = $this->builder
->where($where)
->countAllResults();
}
public function setViewCount(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'action' => 2,
];
$this->attributes['viewCount'] = $this->builder
->where($where)
->countAllResults();
}
public function setFavoriteCount(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'action' => 3,
];
$this->attributes['favoriteCount'] = $this->builder
->where($where)
->countAllResults();
}
public function setCommentCount(string $viewkey)
{
$this->attributes['commentCount'] = $this->builder
->where('viewkey', $viewkey)
->countAllResults();
}
public function setRating(string $viewkey)
{
helper('arithmetic');
$whereDislike = $whereLike = [];
$whereDislike = [
'viewkey' => $viewkey,
'action' => 0,
];
$dislikes = $this->builder
->where($whereDislike)
->countAllResults();
$whereLike = [
'viewkey' => $viewkey,
'action' => 1,
];
$likes = $this->builder
->where($whereLike)
->countAllResults();
$this->attributes['rating'] = get_percentage($likes + $dislikes, $likes, 0);
}
public function setUserDisliked(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'username' => session()->get('username'),
'action' => 0,
];
$userDisliked = $this->builder
->where($where)
->countAllResults();
if ($userDisliked === 1) {
$this->attributes['userDisliked'] = TRUE;
} else {
$this->attributes['userDisliked'] = FALSE;
}
}
public function setUserLiked(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'username' => session()->get('username'),
'action' => 1,
];
$userLiked = $this->builder
->where($where)
->countAllResults();
if ($userLiked === 1) {
$this->attributes['userLiked'] = TRUE;
} else {
$this->attributes['userLiked'] = FALSE;
}
}
public function setUserViewed(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'username' => session()->get('username'),
'action' => 2,
];
$userViewed = $this->builder
->where($where)
->countAllResults();
if ($userViewed === 1) {
$this->attributes['userViewed'] = TRUE;
} else {
$this->attributes['userViewed'] = FALSE;
}
}
public function setUserFavorited(string $viewkey)
{
$where = [];
$where = [
'viewkey' => $viewkey,
'username' => session()->get('username'),
'action' => 3,
];
$userFavorited = $this->builder
->where($where)
->countAllResults();
if ($userFavorited === 1) {
$this->attributes['userFavorited'] = TRUE;
} else {
$this->attributes['userFavorited'] = FALSE;
}
}
public function setUserCommented(string $subscriber)
{
$db = \Config\Database::connect();
$this->builder = $db->table('comments');
$userCommented = $this->builder
->where('commenter')
->countAllResults();
if ($userCommented === 1) {
$this->attributes['userCommented'] = TRUE;
} else {
$this->attributes['userCommented'] = FALSE;
}
}
public function setUserSubscribed(string $uploader)
{
$db = \Config\Database::connect();
$this->builder = $db->table('subscribers');
$where = [];
$where = [
'profile' => $uploader,
'subscriber' => session()->get('username'),
];
$userSubscribed = $this->builder
->where($where)
->countAllResults();
if ($userSubscribed === 1) {
$this->attributes['userSubscribed'] = TRUE;
} else {
$this->attributes['userSubscribed'] = FALSE;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.