Я провел очень много исследований по этой теме, но я не могу найти, как я могу это сделать. Я пытаюсь добавить данные в параметр $data
в представлении, которое вызывается из контроллера другого вида. Однако любые данные, которые я добавляю к subview
через subcontroller
, не могут быть получены с помощью subview
. Однако, когда я пытаюсь передать данные в subview через клиентский вид, он работает отлично. Большинство исправлений на SO, кажется, ссылаться только называя $key in $data['key']
вместо $ данные так, что, кажется, не очень актуальны здесь ...codeigniter передает данные в вложенное представление
У меня есть два класса:
- welcome.php - страницы
- welcomemenu.php - набор элементов управления, предназначенное для быть загружен в welcome.php
Вот мой клиент Controller (страница, на которую он включен, welcome.php
), который хранит возвращаемые Вэла из подвида $welcomemenu
в своем массиве $ данных ...:
<?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 вар где я положил возвращения из моего класса компонента ...):
<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>
По-прежнему я не нашел подходящего решения. если кто-нибудь тогда, пожалуйста, дайте мне
ОК спасибо; Я думаю, что следую этой логике. Однако, это лучшая практика (т. Е. Чтобы данные субконтроллера контролировались клиентским контроллером)? Должен ли я рассматривать рефакторинг так, чтобы субконтроллер мог фактически помещать данные в подзаголовок, или я должен следовать моему текущему курсу развития? – lewiSnort
То, как вы сейчас это делаете, прекрасно - потому что вы включаете его в класс 'Welcome', а не какой-либо другой. Все, что вам нужно запомнить, - это передать ему то, что вам нужно, через '$ data' или, возможно, еще один параметр под названием' $ sub_data' для ясности. – hohner
ОК спасибо.Я думаю, что моя проблема в том, что я путаю функцию index() классов CI/php с конструктором этого класса. – lewiSnort