2017-07-27 67 views
0

爲什麼沒有安全的混合功能選項,比如資產功能?現在我只是複製了幫手,並寫了我自己的mix_secure函數,但我很驚訝沒有人偶然發現了那個呢?可悲的是資產功能沒有緩存破壞...何處使用Laravel Mix啓用Https

任何想法/想法?

乾杯,

羅賓

+0

爲什麼不使用版本緩存清除? – tompec

回答

1

爲什麼會出現在混合功能沒有安全的選項像有對資產的功能?

因爲mix()只返回如果您的刀片模板

<script src="{{ mix('js/app.js') }}"></script> 

使用只是由本身,它將使作爲

<script src="/js/app.js?id=c5ac0d032c3d7fe2f10e"></script> 

和相對於URL

因此URI瀏覽器會選擇任何方案(HTTP或HTTPS)和e域名是由它提供的。當你想用不同的方案提供資產時,我無法想到這種情況。現在你更希望通過HTTPS提供一切服務。

現在,如果你想建立一個完整的URL,以資產有兩個內置函數asset()secure_asset()這也正是他們的名字所暗示的:

 
>>> asset(mix('js/app.js')) 
=> "http://domain.dev/js/app.js?id=c5ac0d032c3d7fe2f10e" 
>>> secure_asset(mix('js/app.js')) 
=> "https://domain.dev/js/app.js?id=c5ac0d032c3d7fe2f10e" 

可悲的是資產函數沒有緩存破壞...

你再次看到這個錯誤。 mix()負責URI而不是asset(),它將使用在編譯資產時生成的資產清單public/mix-manifest.json來生成正確的路徑。爲了充分利用自動緩存無效,你需要版本的編譯時資產laravel混合

mix.js('resources/assets/js/app.js', 'public/js') 
    .sass('resources/assets/sass/app.scss', 'public/css') 
    .version(); // You need to version assets if you want automatic cache busting 

然後混合V1.0.0資產的文件名會包含哈希之前

/js/app-c5ac0d032c3d7fe2f10e.js 

與混合V1.0.0及以上的散正處於查詢參數

/js/app.js?id=c5ac0d032c3d7fe2f10e 

延伸閱讀Versioning/Cache Busting

+0

感謝您的回覆。有趣的是,mix確實會爲我返回一個完整的URL,而不僅僅是URI(這確實可以解決問題)。如果我查看混合函數的Laravel源代碼,最後一行實際上會調用資產函數'return new HtmlString(asset($ manifestDirectory。$ manifest [$ path]));'。這就是爲什麼我構建了'mix_secure',它是mix函數的副本,但最後一行的資產函數爲'return new HtmlString(asset($ manifestDirectory。$ manifest [$ path],true)); '。這個解決方案適用於我,但我很驚訝它不是內置的!? – bobinrinder