关于php:CodeIgniter-可变范围

CodeIgniter - Variable scope

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    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);
    }

在登录脚本的末尾,我有以下内容:

1
2
3
4
5
6
7
  if { // query successful }
  else
        {
            $init['error'] ="fail";

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

现在,这当然不起作用。首先,它仅加载索引视图,而没有页眉和页脚,并且在将原始$ init [\\'error \\']设置为" fail "时失败。我试图用数组作为参数来调用$ this-> index(),但是我似乎无法弄清楚如何传递一个新的$ init [\\'error \\']来覆盖原始参数。 。实际上,在键入此内容时,似乎无法做我想做的事情,因为原始值将始终覆盖新内容。因为我将其声明为空(\\'\\')。

那么,有没有办法在其中获取我的错误消息?如果是这样,怎么做。如果没有,我该如何将错误消息发送到正确的位置? (我的观点:{错误}。我已经尝试使用\\'global \\'来绕过变量范围,但是,这失败了。在此先感谢。


$ init必须在生成视图之前进行修改。

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

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

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

如果您正在使用codeigniter表单验证。

如果您将datamapper orm用于codeigniter,则可以编写模型验证,并且如果由于违反验证规则而导致查询失败,则会在模型的-> error属性中收到正确的错误消息。

您的模型的代码:

1
2
3
4
5
6
var $validation = array(
        'user_name' => array(
            'rules' => array('required', 'max_length' => 120),
            'label' => 'Name'
        )
    );


您可以尝试以下操作:

1
2
3
4
5
6
7
8
9
10
11
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()完全相同,只接受字符串作为第一个参数来代替视图文件,因此它可以协同工作。