【问题标题】:Render views with actions from one controller into a view of a different controller in CakePHP在 CakePHP 中将带有动作的视图从一个控制器渲染到另一个控制器的视图中
【发布时间】:2014-09-20 00:36:09
【问题描述】:

我正在尝试将具有来自一个视图的操作的视图呈现到另一个控制器视图中。

我有一个名为stocks.ctp(使用StocksController)的视图,我想在home.ctpHomeController)中渲染它我想我可以在home.ctp 中执行<?php echo $this->fetch('../Stocks/stocks'); ?>,但这不是在职的。

我也尝试将<?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>

如何正确渲染?我尝试了一堆我在这里找到的解决方案,但还没有任何效果,我尝试了使用说明书的文档,但没有运气。我不知道我做错了什么。

【问题讨论】:

    标签: cakephp cakephp-2.0


    【解决方案1】:

    您应该阅读有关如何在 CakePHP 文档中创建元素的内容。 创建元素后,您应该可以在应用程序中的任何位置使用它们。

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

    例如:

    <?php
    
        echo $this->element('stocks');
    
    ?>
    

    元素应该被渲染。

    在这里阅读:Elements

    【讨论】:

    • 酷,我现在正在看那个。我看到我需要将一个变量传递给它们,我可以用 find 方法来做到这一点吗?在文档中它说&lt;?php echo $this-&gt;element('helpbox',array("helptext" =&gt; "Oh, this text is very helpful."));?&gt;,但我可以做&lt;?php echo $this-&gt;element('helpbox',array("helptext" =&gt; $this-&gt;Post-&gt;find ('all'));?&gt;吗?还是我做这样的事情&lt;?php echo $this-&gt;element('helpbox',array("helptext")); ?&gt; 然后在 elbox.ctp 元素中我做&lt;?php $helptext = $this-&gt;requestAction('Posts/index/'); ?&gt;
    • find 方法应该在控制器中使用。视图只需要包含展览代码。在您的控制器中,您可以执行以下操作: $posts = $this->Post->find('all'); $this->set('posts', $posts);然后 $posts 将在您的视图中可用,因此: $this->element('posts', array('data' => $posts));希望能帮助到你。 requestAction 有效,但由于新请求,您会损失一点性能。我更喜欢直接在当前控制器动作中设置变量。您可以在此处阅读有关 $this->requestAction 的更多信息:book.cakephp.org/2.0/en/…
    【解决方案2】:

    你应该把它放在你的 Homecontroller.. $this-&gt;render('Stocks/stocks');

    【讨论】:

      【解决方案3】:

      在你的控制器动作中做

      $this->autoRender = false; 
      

      在你的控制器动作结束时做

      $this->render('Stocks/stocks');
      

      【讨论】:

        猜你喜欢
        • 2010-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 2018-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多