我正在学习CakePHP,我的第一个MVC,我有一些“最佳实践”问题。
这是我展示新闻文章的观点:
<h1><?php echo h($post['Post']['title'])?></h1>
<p><?php echo h($post['Post']['body'])?></p>
<?php foreach ($post['Comment'] as $comment): ?>
<div class="comment" style="margin-left:50px;">
<p><?php echo h($comment['body'])?></p>
</div>
<?php endforeach;
echo $this->element('newcomment', array("post_id" => $post['Post']['id']));?>
我认为你不能使用“添加”视图在另一个视图中添加注释,所以我创建了一个元素。我希望这是最佳实践。
我的主要“问题”是:添加评论。 我是否在表单中添加了隐藏字段,还是将其添加到表单的操作中?
我选择了“id in action”部分,因为之后重新定位更容易重用。这是新的评论元素:
<h1>Add Comment</h1>
<?php
echo $this->Form->create('Comment',array('action' => 'add',
'url' => array($post_id)));
echo $this->Form->input('body', array('rows' => '3'));
echo $this->Form->end('Add comment');
?>
然后这是CommentsController中的“add”函数:
public function add($post_id = null) {
if ($this->request->is('post')) {
$this->Comment->set(array('post_id'=>$post_id));
if ($this->Comment->save($this->request->data)) {
$this->Session->setFlash('Your comment has been added.');
//$this->redirect(array('action' => 'index'));
$this->redirect(array('controller' => 'posts', 'action' => 'view', $post_id));
} else {
$this->Session->setFlash('Unable to add your comment.');
}
}
}
它应该是怎么回事?
我希望在这里提出这些问题是可以的。使用最佳实践对我来说非常重要。
答案 0 :(得分:4)
将您的问题视为概念概述,而不是逐行概述,这种一般结构/方式没有问题。
我们通常有一个“评论”元素,其中包含所有内容 - 评论,新评论框等。然后,如果您不希望用户能够对该特定事物进行评论,或者您希望显示多少评论的变量等,则可以传递变量。这并不意味着它更好 - 只为我们做得最好。每个站点可能会呈现不同的场景,这使得以更好的方式做到这一点。
我尝试过很多事情(包括CakePHP)的“最佳实践”问题,而我发现的是,通常没有直接的答案。如果您的代码简单,干净,组织良好,并处理任何安全/数据完整性问题,那么您没问题。
我唯一能想到的是Ajax的评论是多么好。用户被宠坏了,让页面刷新只是为了评论某些内容可能会被视为麻烦。
是否使用隐藏字段或网址完全取决于您 - 只要处理数据的代码是可靠的,它就完全不重要了,而且所有这些都归结为首选。