我使用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">×</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。所以现在我真的迷路了...
答案 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}