【问题标题】:CodeIgniter - Variable scopeCodeIgniter - 变量范围
【发布时间】:2011-04-03 22:38:18
【问题描述】:

我有一个用于登录表单的控制器。在视图中,我有一个 {error} 变量,当出现错误时,我想使用解析器库填充该变量。我的控制器中有一个函数 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'] 设置为(在这种情况下)“失败”。我试图只用数组作为参数调用 $this->index() ,但我似乎无法弄清楚如何传递一个新的 $init['error'] 来覆盖原始的。实际上,在键入此内容时,似乎不可能做我想做的事,因为原始值将始终覆盖任何新值..因为我将其声明为空('')。

那么,有没有办法让我的错误消息在那里?如果是这样,如何。如果没有,我将如何在正确的位置获取错误消息? (我的观点:{error}。我已经尝试过使用“全局”来绕过变量范围,但是很遗憾,这失败了。提前非常感谢。

【问题讨论】:

    标签: php codeigniter variables scope


    【解决方案1】:

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

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

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

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

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

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

    您的模型的代码:

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

    【讨论】:

    • 此错误消息是在用户提交错误密码的情况下,我无法使用 form_validation 库进行检查,可以吗?我正在使用 form_validation 来检查 valid_email 和必填字段。我只是希望能够在我的视图中生成此错误消息。
    • 您可以编写自己的表单验证,只需传递回调函数名称而不是验证规则字符串。 codeigniter.com/user_guide/libraries/…
    • 我为此写了两个回调函数,现在可以完美运行了。非常感谢。
    【解决方案2】:

    你可以试试这个:

    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() 完全一样,只接受一个字符串作为第一个参数来代替视图文件,因此它可以结合使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-10
      • 2014-01-31
      • 2011-02-10
      • 2020-02-07
      • 2012-12-23
      相关资源
      最近更新 更多