Laravel public 靜態檔案

雖然檔案打包是現今網頁開發的趨勢,但網站難免需要引用未經編譯的靜態檔案,以避免編譯後的亂數檔名都要經過打包程序才能使用,Laravel 專案包中的 public 資料夾就是靜態檔案的去處,與之相對應會被壓縮及打包的動態檔案則要放置在 resources 資料中:

靜態 css 檔案

在 public/css/style.css 存放網站的主要設計檔,並且在主模板 resources/views/layout/layout.blade.php 中引用該靜態檔案之路徑在 <link> 中:

layout/layout.blade.php
1
2
3
4
<html>
<link rel="stylesheet" href="css/style.css">
...
</html>

但問題來了!當路由來到巢狀或雙層的時候,絕對路徑的悲劇就會發生,若我們將路由改成:

web.php
1
Route::get('/about/about', [homeController::class, 'about']);

你會看到 css 檔案的路徑改變成 http://localhost:3000/about/css/style.css,因為找不到 about 底下的 css 檔案,所以整個 style 返回 404:


url function

你想到的問題 Laravel 怎麼會漏掉?這時候可以使用 blade 模板引擎包裝好的 url 方法,傳入相對靜態檔案路徑當參數,,來抓取靜態檔案的正確路徑:

layout/layout.blade.php
1
<link rel="stylesheet" href="{{ url('css/style.css') }}">

運作正常:

Php 基礎知識 Laravel 善用 layout 避免重複的模板

評論

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×