【问题标题】:Laravel 5.1 How to output HTML in form validation error messagesLaravel 5.1 如何在表单验证错误消息中输出 HTML
【发布时间】:2016-01-13 16:09:08
【问题描述】:

我有一个表单请求类来验证我的数据,我正在使用 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?

【问题讨论】:

标签: php laravel laravel-5 laravel-5.1


【解决方案1】:

原来是我输出导致 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

我不得不将&lt;li&gt;{{ $error }}&lt;/li&gt; 更改为&lt;li&gt;{!! $error !!}&lt;/li&gt;

【讨论】:

  • 如果在这些错误消息中显示任何用户输入的值,请小心。确保使用e($value) 避开那些
【解决方案2】:

不要在消息本身中放置超链接。如果响应返回任何错误消息,请尝试在您的视图中使用 @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) &gt; 0) &lt;div class="alert alert-danger"&gt; &lt;strong&gt;Whoops!&lt;/strong&gt; There were some problems with your input.&lt;br&gt;&lt;br&gt; &lt;ul&gt; foreach ($errors-&gt;all() as $error) &lt;li&gt;{{ $error }}&lt;/li&gt; endforeach &lt;/ul&gt; &lt;/div&gt; endif
  • 您始终可以制作部分视图并使用@include 语句或制作具有该@include 语句的子布局并在您拥有表单的所有视图中使用它。
  • 如果你真的想的话,你仍然可以在你的视图中输出 html。{!! $message !!}
  • 但是即使我这样做了,我也必须检查可能为整个系统中的任何表单设置的每个可能的错误,如果存在则输出它。仅循环遍历已设置的错误会更清洁、更高效。
  • 这样你就用 html 污染了消息。同样,我不知道您的应用程序的上下文 - 对我来说,您似乎不必检查每个可能的错误是否存在才能显示命名约定帮助链接。如果根本没有错误,它可能只是一项检查。无论如何,你知道得更清楚,这是你的应用程序 :)
猜你喜欢
  • 2018-11-04
  • 2016-01-09
  • 2016-03-20
  • 2012-06-04
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
相关资源
最近更新 更多