【问题标题】:should I turn off Smarty debug option?我应该关闭 Smarty 调试选项吗?
【发布时间】:2014-05-12 17:48:29
【问题描述】:

我使用 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>

问题是如果表单验证成功,就会抛出一个 smarty 模板错误:

消息:未定义索引:error_message

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

行号:65

我想知道为什么,因为我之前在问 $error_message 里面是否有东西......

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

提前致谢。

J.

编辑 13/05/2014

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

【问题讨论】:

  • 调试是另一个选项。如果将其设置为 true,Smarty 会打开带有一些调试数据的新窗口,但不会影响显示警告

标签: html codeigniter validation debugging smarty


【解决方案1】:

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

如果只有 !或者只是检查值。

{if $error_message}{/if}

【讨论】:

  • 是的,我正在从我的控制器发送 $this->data['error_message'] 但是当我不是......那么 smarty 也不应该抛出错误(这就是我想要修复)。
【解决方案2】:

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 对象之前

【讨论】:

  • 如果变量(如 $error_message)没有值,Smarty 不应返回错误。我就是想知道smarty在调试的时候怎么关闭这种控制
  • 你应该使用 muteExpectedErrors - 添加信息来回答
猜你喜欢
  • 2013-08-05
  • 2011-09-01
  • 2023-01-06
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
相关资源
最近更新 更多