Laravel 中實現了一個非常簡單的 HtmlString
類
<?php
namespace Illuminate\Support;
use Illuminate\Contracts\Support\Htmlable;
class HtmlString implements Htmlable
{
/**
* The HTML string.
*
* @var string
*/
protected $html;
/**
* Create a new HTML string instance.
*
* @param string $html
* @return void
*/
public function __construct($html)
{
$this->html = $html;
}
/**
* Get the HTML string.
*
* @return string
*/
public function toHtml()
{
return $this->html;
}
/**
* Get the HTML string.
*
* @return string
*/
public function __toString()
{
return $this->toHtml();
}
}
該類實現了 Htmlable
介面
<?php
namespace Illuminate\Contracts\Support;
interface Htmlable
{
/**
* Get content as a string of HTML.
*
* @return string
*/
public function toHtml();
}
我們來看看 HtmlString
類的應用
if (! function_exists('method_field')) {
/**
* Generate a form field to spoof the HTTP verb used by forms.
*
* @param string $method
* @return \Illuminate\Support\HtmlString
*/
function method_field($method)
{
return new HtmlString('<input type="hidden" name="_method" value="'.$method.'">');
}
}
簡單的說,HtmlString
類有兩個作用
- 實現了
Htmlable
介面,代表了可轉化成HTML
,只要是該物件例項,都可以在blade
中可以直接使用,不需要進行額外處理; __toString
方法的使用讓我們在模板中可以優雅的使用HtmlString
物件,例如直接使用{!! $htmlStringObj !!}
而不是{!! $htmlStringObj->toHtml() !!}