Codeigniter将数据变量从控制器传递到视图

时间:2015-04-16 06:32:05

标签: php codeigniter

我正在使用codeigniter框架,并且在其中一个控制器上我有以下代码

public function index() {
    $this->data['users'] = $this->user_m->get();
    $this->data['subview'] = 'admin/usuarios/index';
    $this->load->view('admin/layout_principal', $this->data);
}

我的问题是当我尝试将数据用户子视图用于视图时。 你可以看到" subviews"有一个另一个视图文件的位置,当我打电话给"子视图"在主视图中这样:

<div class="span9">
<?php $this->load->view($subview); ?>
</div>

我收到此错误:

A PHP Error was encountered
Severity: Notice
Message: Undefined variable: subview
Filename: admin/layout_principal.php
Line Number: 19
An Error Was Encountered
Unable to load the requested file: .php*

我说&#34;好吧,它只是我直接放置的位置,继续加载我的用户数据,但是当我使用&#34;用户&#34;从这样的数据:

<?php if(count($users)): foreach($users as $user):?>        
<tr>
<td><?php echo anchor('admin/usuario/editar/' . $user->id, $user->email);?></td>
<td><?php echo btn_edit('admin/usuario/editar', $user->id); ?></td>
<td><?php echo btn_delete('admin/usuario/borrar', $user->id); ?></td>
</tr>
<?php endforeach; ?>
<?php else: ?>
<tr>
<td colspan="3">No users found</td>
</tr>
<?php endif;?>

我收到此错误:

A PHP Error was encountered
Severity: Notice
Message: Undefined variable: users
Filename: usuario/index.php
Line Number: 15

它没有认识到数据变量的观点,我已经搜索并试图解决这个问题,但我仍然遇到同样的问题,好吧,我发布了这个作为最后资源的帮助,你能帮助我吗? ?我该怎么做才能使视图识别数据,因为我无法找到这个错误。

3 个答案:

答案 0 :(得分:0)

我看不到您已加载用户模型

$this->load->model('user_m');

控制器

public function index() {
    $this->load->model('user_m');

    $this->data['users'] = $this->user_m->get();
    $this->data['subview'] = 'admin/usuarios/index';
    $this->load->view('admin/layout_principal', $this->data);
}

您还需要像这样加载视图文件子视图

public function index() {
    $this->load->helper('url'); // Should autoload it.
    $this->load->model('user_m');

    $data['users'] = $this->user_m->get();
    $data['subview'] = $this->load->view('sub_view');

    //if any data in sub view
    //$data['subview'] = $this->load->view('sub_view', $data);

    $this->load->view('admin/layout_principal', $data);
}

如果您需要将控制器加载到控制器中,则需要HMVC

我还没有听说过<?php echo btn_delete();?><?php echo btn_edit();?> http://www.codeigniter.com/userguide2/helpers/url_helper.html

查看试用

<?php if(count($users)): foreach($users as $user):?>        
<tr>
<td><?php echo anchor('admin/usuario/editar' .'/'. $user['id']); ?></td>
<td><?php echo anchor('admin/usuario/borrar' .'/'. $user['id']); ?></td>
</tr>
<?php endforeach; ?>
<?php else: ?>
<tr>
<td colspan="3">No users found</td>
</tr>
<?php endif;?>

答案 1 :(得分:0)

在您的控制器功能

public function index() {
    $this->data['users'] = $this->user_m->get();
    $this->data['subview'] = 'admin/usuarios/index';
    $this->load->view('admin/layout_principal', $this->data);
}
在您的视图文件中

<div class="span9">
<?php 
 if(isset($subview))
foreach($subview as $subvi)
{
  echo $subvi;
}
 ?>
</div>

对于您文件中的用户数据,如下所示:

<?php 
if(count($users)!=0) (OR) if(isset($users))
foreach($users as $user):?>        
<tr>
<td><?php echo anchor('admin/usuario/editar/'.$user->id, $user->email);?>    </td>
<td><?php echo btn_edit('admin/usuario/editar', $user->id); ?></td>
<td><?php echo btn_delete('admin/usuario/borrar', $user->id); ?></td>
</tr>
<?php endforeach; ?>
<?php else: ?>
<tr>
<td colspan="3">No users found</td>
</tr>
<?php endif;?>

答案 2 :(得分:0)

尝试在控制器中使用以下代码(我认为你必须在function __construct(){}中加载“user_m”模型):

public function index() {
    $data = array();
    $data['users'] = $this->user_m->get();

    $data['subview'] = $this->load->view('admin/usuarios/index', $data, true);
    $this->load->view('admin/layout_principal', $data);
}

然后在视图中('admin / layout_principal'):

<div class="span9">
<?php echo $subview; ?>
</div>


<?php if(count($users)): foreach($users as $user):?>        
<tr>
<td><?php echo anchor('admin/usuario/editar/' . $user->id, $user->email);?></td>
<td><?php echo btn_edit('admin/usuario/editar', $user->id); ?></td>
<td><?php echo btn_delete('admin/usuario/borrar', $user->id); ?></td>
</tr>
<?php endforeach; ?>
<?php else: ?>
<tr>
<td colspan="3">No users found</td>
</tr>
<?php endif;?>

但是尝试做所有循环并在控制器本身中查看加载...我可以解释如果你想要我...因为视图只适用于html和php变量..它不应该包含循环和加载视图的代码...但这必须是控制器代码的一部分..并加载一个变量,只需在视图中回显变量......必须注意这一点......以维护标准的MVC ......