codeigniter将数据传递给嵌套视图

时间:2013-02-17 11:05:19

标签: php codeigniter views

我已经对这个主题做了很多研究,但我找不到如何做到这一点。我试图将数据添加到从另一个视图的控制器调用的视图中的$data参数。但是,subview无法访问我通过subcontroller添加到subview的任何数据。但是,当我尝试通过客户端视图将数据传递到子视图时,它可以正常工作。关于SO的大多数修复似乎只是引用了$key in $data['key']而不是$ data,所以这里看起来并不真实......

我有两个班级:

  • welcome.php - 一个页面
  • welcomemenu.php - 一组旨在实现的控件 加载到welcome.php

这是我的客户端控制器(它所在的页面,welcome.php),它将子视图$welcomemenu的返回值存储在自己的$ 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>

仍然找不到任何合适的解决方案。如果有人那么请给我

1 个答案:

答案 0 :(得分:1)

当您在Welcome / index方法中包含welcomemenu partial时,您必须记住视图不会通过自己的控制器。而是将其内容作为字符串返回并存储为参数。它通过$data发送给它的所有参数:

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

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

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

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