代码点火器将数据传递到嵌套视图


codeigniter pass data to nested view

我对这个主题做了很多研究,但我找不到如何做到这一点。我正在尝试将数据添加到从另一个视图的控制器调用的视图中的$data参数中。然而,我通过subcontroller添加到subview的任何数据都不能被subview访问。但是,当我尝试通过客户端视图将数据传递到子视图时,它运行得很好。SO上的大多数修复似乎只引用了调用$key in $data['key'],而不是$data,所以这在这里似乎并不重要。。。

我有两个班:

  • welcome.php-一页
  • welcomemenu.php-一组控件加载到welcome.php

这是我的客户端控制器(它所在的页面welcome.php),它将子视图$welcomemenu的返回val存储在自己的$data数组中…:

<?php
class Welcome extends CI_Controller {
    function __construct() {
        parent::__construct();      
    }
    function index() {
        //echo 'this is the Welcome index function';
        $data['clienttestdata'] = 'data from welcome.php!';
        $data['welcomemenu'] = $this->load->view('welcome/welcomemenu', $data, true);
        $this->load->helper('url');
        $this->load->view('templates/header');
        $this->load->view('pages/welcome', $data);
        $this->load->view('templates/footer');
    }
}

这是客户端视图("welcome_view.php"-看起来很简单。$welcomemenu var是我放置组件类返回的地方…):

    <section id="allWelcomeContent" class="mainBody">
        <header id="mainPageHdr" class=mainPageHdr>
            <!-- other stuff from my header -->
        </header>
        <!-- this is where i want to put the welcome menu... -->
        <section id="mainWelcomeContent" class="mainContent">
            <div>
                <?php echo $welcomemenu;?>
            </div>
        </section>
    </section>

这是我的子组件welcomemenu.php:的控制器

<?php
class Welcomemenu extends CI_Controller {
    public function __construct() {
        parent::__construct();
    }
    public function index() {
        $data['menu_items'] = array('About', 'Portfolio', 'Resume', 'Fun', 'Blog'); 
        $data['testdata'] = 'data from welcomemenu.php!';
        $this->load->view('welcome/welcomemenu', $data);
    }
}

最后:这是一个子视图,它应该从自己的控制器获取数据,但不能,即使它可以从调用客户端获取数据(即,$clienttestdata显示良好,但$testdata不显示)!

<section>
<!-- TODO:  make this element repeatable so content can load from controller and/or model. -->
<div id="divMenuItems">
    <?php echo $clienttestdata;?>
    <?php echo $testdata;?>
</div>
</section>

但我还是找不到合适的解决办法。如果有人,请给我

当您在Welcome/index方法中包含welcomemenu分部时,您必须记住视图不会通过自己的控制器。相反,它的内容以字符串的形式返回,并作为参数存储。它通过你通过$data:发送给它的参数来获得它自己的所有参数

$data['welcomemenu'] = $this->load->view('welcome/welcomemenu', $data, true);

因此,到目前为止,该视图将可以访问$data中的所有内容——没有通过Welcomemenu控制器添加任何额外内容。因此,在上述情况下,它将具有:

array
(
   'clienttestdata' => 'data from welcome.php!'
)

如果将所需的参数添加到$data(作为$data['testdata']),则子视图将具有所需的内容。