渲染到不同的视图Cakephp 3

时间:2016-07-11 09:51:14

标签: view controller render cakephp-3.0 var

我开始研究CakePHP,我遇到了问题。

我在博客项目中有一个文章控制器,我想在我的主页上显示X最后一篇文章,这是页面模板中的home.ctp。

这是我在Articles控制器中的文章功能:

  public function recentArticles(){
     $recentArticles = $this->Articles->find('all', [
      'limit' => 5,
      'order' => 'Articles.created DESC'
     ]);
     $this->set('recentArticles', $recentArticles);
     $this->render('/Pages/home');
}

以下是模板中我试图显示文章的部分:

<?php foreach ($recentArticles as $article): ?>
<section class="col-4-ligne">
  <?=$this->Html->image('slide3.jpg', array('alt' => 'nom du slide', 'class' => 'img-responsive'))?>
  <a href="categories/view/1"><section class="btn btn-lg btn-danger principale"><?= $article->title ?></section></a>
</section>
<?php endforeach; ?>

我尝试在控制器中使用$ this-&gt;渲染,我也尝试将我的函数放入Pages控制器中,如下所示:

  public function recentArticles(){
     $this->loadModel('Articles');
     $recentArticles = $this->Articles->find('all', [
      'limit' => 5,
      'order' => 'Articles.created DESC'
     ]);
     $this->set('recentArticles', $recentArticles);
     $this->render('/Pages/home');
}

但在每种情况下,我在模板中得到的错误都是“Undefined variable:recentArticles”。

有什么想法吗?

编辑:好的,所以我没有成功调用recentArticles函数,所以我将代码放入默认的函数显示,这样就可以了。 我不知道这是不是很好的方法。

    public function display()
{
    $path = func_get_args();

    $count = count($path);
    if (!$count) {
        return $this->redirect('/');
    }
    $page = $subpage = null;

    if (!empty($path[0])) {
        $page = $path[0];
    }
    if (!empty($path[1])) {
        $subpage = $path[1];
    }
    $this->set(compact('page', 'subpage'));

    //Latest articles
    $this->loadModel('Articles');
    $recentArticles = $this->Articles->find('all', [
     'limit' => 5,
     'order' => 'Articles.created DESC'
    ]);
    $this->set('recentArticles', $recentArticles);

    try {
        $this->render(implode('/', $path));
    } catch (MissingTemplateException $e) {
        if (Configure::read('debug')) {
            throw $e;
        }
        throw new NotFoundException();
    }
}

0 个答案:

没有答案