2014-09-19 90 views
0

我试图将操作从一个视图渲染到另一个控制器视图中。将操作从一个控制器渲染到CakePHP中不同控制器的视图中

我有一个名为stocks.ctp(使用StocksController)一个一个观点,我想在home.ctpHomeController)来呈现我想我可能只是做<?php echo $this->fetch('../Stocks/stocks'); ?>home.ctp,但不工作。

我也试图把<?PHP $this->extend('stocks'); ?>home.ctp但只是覆盖整个视图,并只呈现stocks.ctp

如何在home.ctp内显示stocks.ctp

这仅仅是一个例子:这里是

 <?php $this->start('stocks');?> 
     <div> 
      content 
     </div> 
     <?php $this->end(); ?> 

这里是公正,例如home.ctp看法。

 <div class="col-3"> 
      <h1>STOCK MARKET WOOOOO</h1> 
      <?php echo $this->fetch('stocks'); ?> 
     </div> 
     <div class="col-3"> 
      <h1>Opinion</h1> 
      <hr></hr> 
     </div> 

我该如何正确渲染它?我尝试了一堆我在这里找到的解决方案,但没有任何工作,我尝试了使用食谱的文档,但没有运气。我无法弄清楚我做错了什么。

回答

0

你应该阅读关于如何在CakePHP文档中创建元素。 创建元素后,您应该能够在应用程序中的任何位置使用它们。

  1. 创建元素中查看/元素,例如:/View/elements/stocks.ctp
  2. 要求在您home.ctp。

例如:

<?php 

    echo $this->element('stocks'); 

?> 

的元件应该被渲染。

在这里了解一下:Elements

+0

很酷,我现在在看。我看到我需要将一个变量传递给它们,我可以使用find方法做到这一点吗?在文档中它说'<?php echo $ this-> element('helpbox',array(“helptext”=>“哦,这段文字非常有帮助。”));?>'但我可以做'<? php echo $ this-> element('helpbox',array(“helptext”=> $ this-> Post-> find('all'));?>'?或者我做这样的事情'<?php echo $ this-> element('helpbox',array(“helptext”));?>'然后在helbox.ctp元素中执行'<?php $ helptext = $ this-> requestAction('Posts/index/');?>'? – user3298823 2014-09-19 20:54:10

+0

查找方法应该在控制器中使用,视图只需要包含展览代码。在你的控制器中,你可以这样做:$ posts = $ this-> Post-> find('all'); $ this-> set('posts',$ posts);然后$ posts将在你的视图中可用,所以:$ this-> element('posts',array('data'=> $ posts));希望能帮助到你。 requestAction是有效的,但是由于新的请求,你失去了一点性能。我更愿意直接在当前控制器操作中设置变量。你可以在这里阅读更多关于$ this-> requestAction:http://book.cakephp.org/2.0/en/controllers.html#Controller::requestAction – andtxr 2014-09-19 21:04:01

0

你应该把这个在您的HomeController .. $this->render('Stocks/stocks');

0

在你的控制器动作做

$this->autoRender = false; 

,并在你的控制器动作结束也

$this->render('Stocks/stocks'); 
相关问题