我正在使用cakephp(2.4.7)进行开发,我想知道哪里是最好的位置(控制器,模型等)来编写检查功能以在视图中显示不同的东西(按钮,标签,...)。
例如,检查用户是否已经喜欢过帖子(显示“不喜欢”而不是“喜欢”)或检查用户是否是朋友并显示“删除朋友”而不是“添加朋友”按钮。
我知道这个问题非常基础,但我不知道应该把代码放在哪里。
我有什么: 视图的
$hasLiked = $this->requestAction('/userlikes/hasliked/' . $postId); // returns true/ false
if ($hasLiked) {
$this->Html->link('Dislike', array('controller' => 'userlikes', 'action' => 'dislike', $postId));
} else {
$this->Html->link('Like', array('controller' => 'userlikes', 'action' => 'like', $postId));
}
UserlikesController
public function hasliked($postId) {
if (empty($this->request->params['requested'])) {
throw new ForbiddenException();
}
return $this->Userlikes->hasliked($postId, $this->Auth->user('id'));
}
用户模型
public function hasliked($postId, $userId) {
$result = $this->find('count', array('conditions' => array('post_id' => $postId, 'user_id' => $userId)));
if ($result == 0) {
return false;
} else {
return true;
}
}
但我认为我的解决方案很脏,有更好的方法吗?非常感谢你。
答案 0 :(得分:1)
我建议改变你的解决方案
用户模型
public function hasliked($postId, $userId) {
return !empty($this->find('count', array('conditions' => array('post_id' => $postId, 'user_id' => $userId))));
}
UserlikesController
public function hasliked($postId) {
if (empty($this->request->params['requested'])) {
throw new ForbiddenException();
}
$this->set('hasliked',$this->User->hasliked($postId,$this->Auth->user('id')));
}
在您的视图中
<?php if($hasliked) :?>
<?php echo $this->Html->link('Dislike', array('controller' => 'userlikes', 'action' => 'dislike', $postId)); ?>
<?php else: ?>
<?php echo $this->Html->link('Like', array('controller' => 'userlikes', 'action' => 'like', $postId));; ?>
<?php endif;?>
答案 1 :(得分:0)
我认为你错过了一件事......像Ajax这样的功能,如Like,dislike,points等。因此,简化所有操作并通过Ajax调用它们。象 -
public function like(){
$this->autoRender = false; // If you wants to use this function just for ajax
if($this->request->is('ajax')){
// do something
// capture all values send by Ajax and Call save function
}else{
return; // if not a ajax call, return
}
}
这只是一个例子----------
还有一件事,如果您要在View上分享相同的内容,请更好地创建element
。