Laravel 5.1如何在表单验证错误消息中输出HTML?

4

我有一个表单请求类来验证我的数据,并且我正在使用messages()方法返回自定义的验证错误信息,如下所示:

public function messages()
{
    return [
        'name.valid_name' => 'The name is incorrect, please see the <a href="'.route('naming_conventions').'">Naming Conventions</a> page for instructions on naming.'
    ];
}

正如您所看到的,我希望在错误消息中输出超链接以帮助用户。 然而,当错误消息被输出时,所有HTML标记都被转换为实体,因此实际输出的是:

The name is incorrect, please see the &lt;a href=&quot;http://local.website.com/naming-conventions&quot;&gt;Naming Conventions&lt;/a&gt; page for instructions on naming.

我该如何在错误信息中输出HTML?
如何在错误信息中输出HTML?

可能是Laravel 5:使用Blade显示HTML的重复问题。 - Gerard Reches
2个回答

7
原来问题出在我输出错误信息的方式上,导致了HTML实体的问题。我之前是这样做的:
@if (count($errors) > 0)
    <div class="alert alert-danger">
        <strong>Whoops!</strong> There were some problems with your input.<br><br>
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

我不得不将<li>{{ $error }}</li>更改为<li>{!! $error !!}</li>


只要注意任何用户输入的值是否显示在错误消息中。请确保使用 e($value) 进行转义。 - andrewtweber

0

不要在消息本身中放置超链接。如果响应返回任何错误消息,请尝试在视图中使用@if @endif语句。

@if($errors and $errors->has('name.valid_name'))
he name is incorrect, please see the  <a href="">Help link</a>
@endif

我不能这样做,因为我在模板中输出错误而不是视图,以防止重复代码。否则,我将不得不在每个单独的视图顶部放置以下代码,这似乎不合逻辑:if (count($errors) > 0) <div class="alert alert-danger"> <strong>Whoops!</strong> There were some problems with your input.<br><br> <ul> foreach ($errors->all() as $error) <li>{{ $error }}</li> endforeach </ul> </div> endif - geoffs3310
你可以始终创建一个部分视图并使用@include语句,或者创建一个包含该@include语句的子布局,并在所有具有表单的视图中使用它。 - Glad To Help
1
如果你真的想要,在视图中仍然可以输出HTML: {!! $message !!} - Glad To Help
但是即使我这样做,我也必须检查系统中任何表单可能设置的每个可能的错误,并在存在时输出它。更清晰和更有效的方法是只循环遍历已设置的错误。 - geoffs3310
这样做会使消息混杂着 HTML。再次声明,我不知道你的应用程序的上下文 - 对我来说,似乎你不必检查每个可能的错误的存在才能显示命名约定帮助链接。它只需要检查是否有任何错误即可。无论如何,你更清楚,这是你的应用程序 :) - Glad To Help

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接