CodeIgniter - 可变范围

时间:2011-04-03 22:38:19

标签: php codeigniter variables scope

我有一个控制器,我用它来登录表单。在视图中,我有一个{error}变量,当出现错误时,我想通过使用解析器lib来填充它。我的控制器中有一个函数index(),由数组$ init控制,它将一些基本变量和错误消息设置为'':

    function index()
    {
    $init = array(
                    'base_url'      =>      base_url(),
                    'title'         =>      'Login',
                    'error'         =>      ''
            );

    $this->parser->parse('include/header', $init);

    $this->parser->parse('login/index', $init);

    $this->parser->parse('include/footer', $init);
    }   

在我的登录脚本结束时,我有以下内容:

  if { // query successful }
  else 
        {
            $init['error'] = "fail";

            $this->parser->parse('login/index', $init);
        }

现在,当然这不起作用。首先,它只加载没有页眉和页脚的索引视图,并且在将原始的$ init ['error']设置为(在这种情况下)为“fail”时失败。我试图用可能数组作为参数调用$ this-> index(),但我似乎无法弄清楚如何传递一个新的$ init ['error']来覆盖原来的那个。实际上,在输入这​​个时,似乎不可能做我想做的事情,因为原始值将始终覆盖任何新的...因为我声明它没有('')。

那么,有没有办法在那里收到我的错误信息?如果是这样,怎么样。如果没有,我将如何在正确的位置获取我的错误消息? (我的观点:{error}。我尝试用'全局'来绕过变量范围但是唉,这很失败。非常感谢。

2 个答案:

答案 0 :(得分:1)

在生成视图之前修改$ init musst。

要加载页眉和页脚,您可以在视图中包含以下命令和页脚等效项。

<?php $this->load->view('_header'); ?>

要显示错误,您也可以使用validation_errors()

如果您使用的是codeigniter表单验证。

如果您使用datamapper orm进行codeigniter,您可以编写模型验证,如果查询因验证规则违规而失败,则会在模型的 - &gt; error属性中收到正确的错误消息。

您的型号代码:

var $validation = array(
        'user_name' => array(
            'rules' => array('required', 'max_length' => 120),
            'label' => 'Name'
        )
    );

答案 1 :(得分:0)

你可以试试这个:

function index() {
    $init = array(
        'base_url' => base_url(), 
        'title' => 'Login',
        'error' => ''
    );
    $string = $this->parser->parse('include/header', $init, TRUE);
    $string .= $this->parser->parse('login/index', $init, TRUE);
    $string .= $this->parser->parse('include/footer', $init, TRUE);
    $this->parser->parse_string(string);
}

parse()中,当您希望返回数据而不是(立即)发送到输出类时,可以将TRUE(布尔值)传递给第三个参数。另一方面,方法parse_string的工作方式与`parse()完全相同,只接受一个字符串作为第一个参数来代替视图文件,因此它可以协同工作。