【问题标题】:CodeIgniter: Sending array from model to viewerCodeIgniter:将数组从模型发送到查看器
【发布时间】:2011-05-22 22:27:45
【问题描述】:

如何将数组从模型发送到视图文件?

背景: 我有一个可以放入名称的表格(查看文件)。然后我将此信息传递给我的控制器文件,该文件检查是否有信息添加到表单中。如果没有出现错误消息并告诉用户必须添加名称。如果名称已添加到表单中,则控制器将信息传递给模型,该模型检查数据库中是否有任何名称已存在于数据库中。如果数据库中已经存在部分或全部名称,则将它们传递到 array。如果名称未添加到数据库中,模型文件会将它们添加到数据库中。

我想获取数据库中已经存在的名称数组并为用户输出这些名称。所以这就是为什么我需要数据库中已有名称的数组。

User add:
Mark
Sophie
Dan
Josh

Already in database:
Mark 
Dan

Array then contains (should be output to the user):
Mark
Dan

我认为可能的一个解决方案是在模型文件中的函数中添加一个返回语句。并像这样检索数组:

$data['nameArray'] = $this->model_name->add_name();

但这不起作用,因为如果用户错过了向表单添加信息,else 语句将被显示并且 $data['nameArray'] 将不会被定义。尝试在视图文件中输出时导致错误消息“未定义的变量”。

【问题讨论】:

    标签: arrays codeigniter view model controller


    【解决方案1】:

    在 codeigniter 中将数组从模型传递到控制器或视图没有困难。像传递任何其他变量一样传递它们。

    您的想法似乎应该可行。如果您想防止出现“未定义变量”错误,您可以在视图中使用isset(),如下所示:

    <?php if isset($nameArray) echo $nameArray; ?>
    

    如果您的模型已返回名称数组,它只会回显它。

    或者,您可以按照 atno 所说的那样在控制器本身中添加一个检查:

    $data['nameArray'] = $this->model_name->add_name();
    if ( ! $data['nameArray']) $data['nameArray'] = array();
    

    还有其他方法可以做到这一点,取决于您的情况和偏好,以最佳方式为准。

    【讨论】:

    • 但是如何传递变量呢?当从控制器传递到查看器时,我使用这个: $data['text'] = "Detta är testtext."; $this->load->view('header', $page_info); $this->load->view('my_view', $data);但我不想从我的模型中加载视图。我只是不想传递在 if 语句中定义的变量。如果正确,则将变量传递给查看。
    • @Fredrik - 我不明白 - 通常你会从控制器访问模型方法,然后使用 $data 数组将结果传递给视图。根据您的描述,这似乎是您在做什么?我所描述的不需要从视图加载模型,而是从控制器调用它。
    【解决方案2】:

    在将模型结果添加到数组之前,检查结果是否为空,如果为空,则添加类似 $data['nameArray'] = "N/A" 的值,否则如果不为空 $data['nameArray'] = $this-&gt;model_name-&gt;add_name();,则在您的视图中检查 $nameArray 是否为数组并继续使用该数组否则显示字符串 N/A。我就是这样做的

    如果用户错过了向表单添加信息如果您的用户必须输入此值,您必须强制他们这样做,请检查 Form_Validation 库中的 codeigniter .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多