XE3 (Xpressengine 3) - UI Object 추상 클래스 AbstractUIObject

class AbstractUIObject (Path: \core\src\Xpressengine\UIObject\AbstractUIObject.php)

화면에 그려주는 UI Object 는 render 함수에서 blade.php 파일을 바로 사용할 수 있도록 HtmlString  오브젝트를 반환해줍니다.

/**
 * UIObject가 출력될 때 호출되는 메소드이다.
 *
 * @return string
 */
public function render()
{
    return new HtmlString($this->template);
}

 

class HtmlString (Path: \vendor\laravel\framework\src\Illuminate\Support\HtmlString.php)

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

Illuminate\\Contracts\\Support\\Htmlable\\HtmlString

interface Htmlable
{
    /**
     * Get content as a string of HTML.
     *
     * @return string
     */
    public function toHtml();
}

Htmlable 을 상속받은 클래스는 balde.php 파일 내에서 {{ }} 안에 사용해 설정한 HTML 결과를 화면에 보여줍니다.

{{ }} 구문은 XXS 공격을 방지하기 위해 자동으로 PHP의 htmlspecialchars 함수를 실행하게 됩니다.


helper function e 

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

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

  • share