我应该关闭Smarty调试选项吗?

时间:2014-05-12 17:48:29

标签: html codeigniter validation debugging smarty

我使用Codeigniter和Smarty模板引擎。

我使用Codeigniter的表单验证库进行了表单验证。因此,如果用户输入一些数据,我需要有一个方法来验证它。

如果表单通过验证,则视图中不应显示任何错误。

如果表单未通过验证,我使用以下代码行:$this->data['error_message'] = $this->form_validation->error_array(); 存储发生的错误。

所以,在我的模板中我做到了这一点:

<div id="cl-wrapper" class="login-container">

  <div class="middle-login">
    {if $error_message != ""}
    <div class="alert alert-danger">            
        {foreach from=$error_message item=curr_id}
        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
        <i class="fa fa-times-circle sign"></i><strong>Error!</strong> {$curr_id}<br/>
        {/foreach}
    </div>
    {/if}

    <div class="block-flat">
        //some code
    </div> 
  </div>    
</div>

问题是如果表单验证OK,则抛出一个聪明的模板错误:

消息:未定义的索引:error_message

文件名:sysplugins / smarty_internal_templatebase.php(151):eval()'d code

行号:65

我想知道原因,因为我很好地询问$ error_message是否有内容......

这在我之前没有发生过......在另一个项目中。

提前致谢。

学家

EDIT 13/05/2014

我发现帖子here有同样的问题。它说调试应该关闭。我检查了Smarty.class.php和变量$ debugging = false。所以现在我真的迷路了...

2 个答案:

答案 0 :(得分:0)

似乎Smarty不知道$ error_message是什么,所以问题不是foreach循环,但是这个比较{if $error_message != ""}删除foreach循环并再次检查。

您应该检查您在PHP中进行作业的位置。

它应该是这样的(我不知道codeigniter):

$smarty->assign('error_message', $this->data['error_message']);

也许问题是你应该在Smarty中使用不是$ error_message但是例如$ data.error_message?

如果你想关闭Smarty错误,你应该使用这里描述的muteExpectedErrors()函数 - http://www.smarty.net/docs/en/api.mute.expected.errors.tpl - 它来自3.1.2版本。在使用error_reporting - http://www.smarty.net/docs/en/variable.error.reporting.tpl将所需级别设置为Smarty对象之前

答案 1 :(得分:0)

检查您的控制器是否有$ data ['error_message']。

如果只是状态,你也可以这样做!或者只是检查价值。

{if $error_message}{/if}