如何将数据库记录从Controller传递到CakePHP中的View

时间:2012-02-20 15:21:50

标签: cakephp cakephp-2.0

我在CakePHP开始了一个项目。我没有它的经验,我的大多数经验都是用Symfony2。

现在,我已经构建了一个视图文件,一个控制器和一个模型,用于该项目及其数据库。在一个控制器中,我想将一条记录从数据库传递到视图,以便在主页上使用。但是,当我收到此错误时,我无法传递记录:

  

注意(8):未定义的变量:content [APP \ View \ Contents \ home.ctp,   第42行

这是我的控制器代码:

function home() {
    $content = $this->Content->query("SELECT title, content FROM content WHERE id = 1;");
    $this->set('pagecontent',$content); 
}

以下是我用于在视图文件中显示数据的代码:

<?php $content['content']; ?>

我错过了什么?


修改 我已将<?php $content['content']; ?>更改为<?php echo $pagecontent['Content']['content']; ?>内联,并附有Ross答案中列出的更改。但是,现在出现了这个错误:

  

注意(8):未定义的索引:内容[APP \ View \ Contents \ home.ctp,line   43]

我使用了<?php echo debug($this->viewVars); ?>,这是该输出:

 app\View\Contents\home.ctp (line 42) Array (
     [pagecontent] => Array
         (
             [0] => Array
                 (
                     [content] => Array
                         (
                             [title] => <h1>This is a title</h1>
                             [content] => <p>this is some test text</p>
                         )

                 )

         )

 )

1 个答案:

答案 0 :(得分:1)

$this->set('pagecontent',$content); - 这是您设置视图变量的位置。

您正在尝试访问名为$content的变量,而实际上它存储为$pagecontent

同样基于Cake约定,键content实际上应该是Content,因此您的输出应该是:

<h1><?php echo $pagecontent['Content']['title']; ?></h1>
<div class="page-content">
    <?php echo $pagecontent['Content']['content']; ?>
</div>

您始终可以debug($this->viewVars);查看您有权访问的内容。


看到输出有帮助;错误是由于蛋糕如何返回数据。

这可能是由于您使用query()而不是find()read()。 (还解释了为什么您的content键是小写的 - query() uses the table name,而不是型号名称。

尝试:

$content = $this->Content->find('first', 
                              array('fields' => array('title', 'content'),
                                    'conditions' => array('Content.id' => 1)
                                   )
                               );

$this->set('pagecontent', $content); 


// view
echo $pagecontent['Content']['title'];
echo $pagecontent['Content']['content'];

现在应该有效。

另一种方法是只通过数组索引访问数据:

echo $pagecontent[0]['content']['title']

不像“蛋糕”那样。

展开= query()会返回与使用findread不同的结构中的数据。还有其他方法可以做到这一点。

$this->Content->id = 1;
$this->set('pagecontent', $this->Content->read(array('title', 'content')));

也应该有效。