Laravel 小知識點之 HtmlString 類

心智極客發表於2019-10-26

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() !!}

相關文章