Blade 模板,輸出 PHP 變數到 JavaScript 指令碼中的正確方式

Sparkfly發表於2019-08-09

如果你不是 SPA,那麼在Laravel Blade 模板中不可避免輸出部分內容到 JavaScript 指令碼中:

例如(Bad):

<script>
    var profile = {
        'username' =>  '{{ $user['username'] }}',
        'age' => '{{ $user['age'] }}'
    };
</script>

如果 $username 中存在 ' or " 等其他的字元,那麼js語法錯誤,最終頁面崩潰。

有一個擴充套件可以很好解決這個問題:
https://github.com/laracasts/PHP-Vars-To-J...

我縮減了一個版本:
https://github.com/helingfeng/php2js-vars

使用方式:

composer require helingfeng/php-javascript-transformer

程式碼示例:

// 包含特殊字元輸出
app('js.transformer')->put(['username' => "'helingfeng"]);
# window.username = '\'helingfeng';

// 修改 namespace 輸出
app('js.transformer')->setNamespace('profile')->put(['username' => 'helingfeng']);
# window.profile = window.profile || {};profile.username = 'helingfeng';

// 輸出包含 script 標籤
app('js.transformer')->includeScript()->put(['username' => 'helingfeng']);
# <script>
#    window.username = 'helingfeng';
#</script>

模板中使用 {!! !!} 非轉義輸出頁面頭部或底部即可。

相關文章