laravel 4:如何将原始HTML插入标签?
有什么简单的方法可以将原始HTML标记放到标签上吗?我有这个:laravel 4:如何将原始HTML插入标签?,html,label,laravel,Html,Label,Laravel,有什么简单的方法可以将原始HTML标记放到标签上吗?我有这个: {{ Form::label('firstName', 'First name <em>*</em>', array('class' => 'input_tag')) }} {{Form::label('firstName','firstName*',array('class'=>'input_tag'))} 它产生: <label class="input_tag" for="firstNa
{{ Form::label('firstName', 'First name <em>*</em>', array('class' => 'input_tag')) }}
{{Form::label('firstName','firstName*',array('class'=>'input_tag'))}
它产生:
<label class="input_tag" for="firstName">First Name <em>*</em></label>
名字em*/em
但是标记EM并没有被解释为它应该是的。我想要的是:
<label class="input_tag" for="firstName">First Name <em>*</em></label>
名字*
明白了,它正在使用e()helper函数,该函数使用htmlentities()格式化标签,这将标签转换为&;书信电报;机电工程署;燃气轮机*&;lt/机电工程署;燃气轮机代码>
快速且(非常)肮脏的修复方法是在第一次调用Helpers.php之前将其添加到start.php或其他位置:
function e($value) { return $value; }
但这远远不够理想。我经常将原始html用于表单输入和标签,因为我发现阅读和使用html5属性(如required和placeholder)更容易。这个表单是一个很好的例子,说明了如何将原始html与Input::old一起使用,它允许您捕获旧的输入 我相信Form::label($name、$value、$attributes、$escape\u html)使用了第四个参数,它告诉表单是否要转义html。它默认为true。因此,如果您的预期结果是斜体*,请将false作为第四个参数传递 您可以创建一个助手函数(宏),如下所示:
HTML::macro('raw', function($htmlbuilder) {
return htmlspecialchars_decode($htmlbuilder);
});
在你看来:
{{ HTML::raw(Form::label('input_firstname', 'Prénom <sup>*</sup>')) }}
{{HTML::raw(Form::label('input_firstname','Prénom*'))}
对于必需的输入,我没有尝试将HTML添加到标签中,而是添加了一个类“required input”(或其他内容)
然后我有下面的CSS规则
label.required-input:before {
content: ' * ';
color: #f00;
}
这将起作用,除非您需要为屏幕阅读器提供*。但是您仍然可以在输入上添加所需的标志。使用HTML::decode()
{{HTML::decode(Form::label('firstName','firstName*',array('class'=>'input_tag')))}
在宏中使用sprintf
比重新编码快得多:
Form::macro('rawLabel', function($name, $value = null, $options = array())
{
$label = Form::label($name, '%s', $options);
return sprintf($label, $value);
});
正确的html输出应该是什么?这是正确的html输入,但在输入附近的站点是“名字*”而不是“名字*”注意,生成的html实际上是实体编码的:First Name em*/em
,与上面所述不完全相同。查看API文档中的Form::label,我们可以看到,没有第四个参数可以转义html。这在这个特定的例子中是可行的,但是请注意,在生成的label元素中可能还有其他您不想解码的实体。您可能需要使用{!!!!}而不是{}。谢谢你的提示!如果您只需要这一次,并且您想要一个快速简单的解决方案,您也可以内联执行,例如,{{sprintf(Form::label('tncs','%s',array('class'=>'control label tncs label')),“我同意'}}
是的,这会起作用,但即使对于1个使用解决方案的人来说,也最好将其提取出来。它很难看,也很难理解。如果我想在多个视图中使用它,这个“小部件”的合适位置在哪里?我希望只包含一次,而不是每次我需要它的时候。我会将它放在AppServiceProvider的引导功能中。您需要引用完整的FormFacade,而不是它的别名(例如\Collective\Html\FormFacade::
而不是表单::
)
Form::macro('rawLabel', function($name, $value = null, $options = array())
{
$label = Form::label($name, '%s', $options);
return sprintf($label, $value);
});