什么是Laravel中使用的“HtmlString”?

时间:2017-02-18 19:07:18

标签: php 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();
    }
}

使用:

    function csrf_field()
    {
        return new HtmlString('<input type="hidden" name="_token" value="'.csrf_token().'">');
    }

除了“构造”一个​​字符串并返回字符串本身之外什么也没做!

任何人都可以解释一下吗?非常感谢:)

2 个答案:

答案 0 :(得分:4)

由于它实现了一个接口(Htmlable),因此其他方法可以检查它所给出的字符串是否应该被视为HTML。

它没有那么多用,但是例如Illuminate/Support/helpers.php:519

if (! function_exists('e')) {
    /**
     * Escape HTML special characters in a string.
     *
     * @param  \Illuminate\Contracts\Support\Htmlable|string  $value
     * @return string
     */
    function e($value)
    {
        if ($value instanceof Htmlable) {
            return $value->toHtml();
        }

        return htmlspecialchars($value, ENT_QUOTES, 'UTF-8', false);
    }
}

在这里,您可以看到,如果$value加入Htmlable界面,则可以立即打印。否则,字符串将以转义形式打印。

答案 1 :(得分:0)

如果我理解为好,您想在.blade.php文件中使用它吗? 使用

{{csrf_field()}}