【问题标题】:Edit associated model from view of another model (CakePHP 3)从另一个模型的视图中编辑关联模型(CakePHP 3)
【发布时间】:2016-05-21 16:18:13
【问题描述】:

我对 CakePHP 还很陌生,虽然我觉得我有一些基本的了解。

我已经基于“文章”表和bake all 制作了一个基本博客,到目前为止,小菜一碟;D。现在我添加了一个“cmets”表。 'articles' 有许多 'cmets' 和 'cmets' 属于 'articles'。我再次为这两个表baked all 并编辑了ArticlesController.php 和Articles/view.ctp 中的'view' 操作以显示一篇文章的所有cmets。还没有问题。

现在我希望能够在文章的“查看”页面上添加评论,就像您可以在此论坛上发表评论一样。所以我在 view.ctp 中添加了一个Html->Form 并将评论的 add() 中的一些部分复制到文章的 view() 中。文章的查看操作:

public function view($id = null) {

$article = $this->Articles->get($id, [
    'contain' => ['Comments']
]);

// Part from the add-action from Comments
$comment = $this->Comments->newEntity();
if ($this->request->is('post')) {
    $comment = $this->Comments->patchEntity($comment, $this->request->data);
    if ($this->Comments->save($comment)) {
        $this->Flash->success(__('The comment has been saved.'));
        return $this->redirect(['action' => 'index']);
    } else {


      $this->Flash->error(__('The comment could not be saved. Please, try again.'));
        }
    }

    // Set the selected article
    $this->set('article', $article);
    $this->set('_serialize', ['article']);
}

Articles/view.ctp 的一部分:

<?php foreach ($article->comments as $comment) : ?>

    <h5><?= $comment->author ?></h5>

    <p><?= $comment->body ?></p>

<?php endforeach; ?>


<b>Add comment</b>

<?= $this->Form->create($comment) ?>
<?php
echo $this->Form->input('comment.author');
echo $this->Form->input('comment.body');
?>
<?= $this->Form->button(__('Submit Comment')) ?>
<?= $this->Form->end() ?>

但这给了我一个致命的错误,:

错误:在布尔文件上调用成员函数 newEntity() C:\xampp\htdocs\blog_simple\src\Controller\ArticlesController.php 线路:45

关于如何完成我正在寻找的任何建议?

【问题讨论】:

    标签: cakephp view cakephp-3.0 edit


    【解决方案1】:

    错误:在布尔文件上调用成员函数 newEntity() C:\xampp\htdocs\blog_simple\src\Controller\ArticlesController.php 线路:45

    因为您在Articles Controller 中,并且您正在尝试Comments 相关功能(没有加载模型)。

    你有两个选择。

    1. 如果您设置了正确的关系,则将Articles 附加到类似的调用中,

      $comment = $this->Comments->newEntity();
      

      $comment = $this->Articles->Comments->newEntity();
      

    对所有 cmets PatchEntitySave 函数执行类似操作。

    1. 添加

      $this-&gt;loadModel('Comments');

      在调用Comments 相关函数之前。无需像前面提到的那样附加Articles。因为,我们正在加载模型。

    试试你喜欢哪一个。祝你好运!

    【讨论】:

    • 感谢您的回复!在操作中将“Comments->”替换为“Articles->Comments”已消除错误,但尚未添加任何 cmets。编辑:我看到我自己的 flash 错误,所以 save($comment) 没有成功。
    • 不仅newEntity(),你也必须为下面的调用添加它。
    • 我阅读了答案。我在行动中到处更换它。并且没有错误。它只是不保存它。有什么方法可以从-&gt;save() 函数中获取一些信息?
    • 想通了!视图中的表单仍然有comment.author 等,而不仅仅是author 等。删除“评论”。修复。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多