2017-02-18 47 views
4

这个类:HtmlString在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().'">'); 
    }

它什么都不做,而是 “建设” 的字符串,返回字符串本身!

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

回答

0

如果我理解不错,你想在.blade.php文件中使用它? 使用

{{csrf_field()}} 
+0

当然,它就像你说的XD一样使用,但是我很好奇它下面的HtmlString类,谢谢你的时间。 – zjuwujunchao

+0

注意'csrf_field()'返回'HtmlString',所以在刀片中你可以使用'{{...}}'而不是'{! '!!}'。不需要记住打印原始数据并确保它不会被转义 – morph

2

由于它实现了一个接口(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 adhers到Htmlable接口,它可以立即打印出来。否则,该字符串将以转义形式打印。

相关问题