2017-02-18 44 views
4

このクラス:HtmlStringLaravelで使用されている `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ファイルで使いたいですか?それはインタフェース(Htmlable)を実装するため 使用

{{csrf_field()}} 
+0

もちろん、あなたがXDと言ったように使用されますが、その下のHtmlStringクラスについて興味があります。ありがとうございます。 – zjuwujunchao

+0

'csrf_field()'が 'HtmlString'を返す方法に注目してください。ブレードでは、' {{...}} 'の代わりに '{!! ... !!} '。生の印字を覚えておく必要がなく、エスケープされないことを保証する – morph

2

は、他の方法は、潜在的にそれが与えられていた文字列が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); 
    } 
} 

を、あなたはHtmlableインターフェイスに$value adhers場合、それはすぐに印刷することができることがわかります。それ以外の場合、文字列はエスケープ形式で出力されます。

関連する問題