:::
10-4 修改模型以正確顯示圖片
-
在控制器中,我們利用
Product模型的all()方法來取得商在資料庫中的資料,但其中圖片到時候沒有辦法正常顯示,這是因為商品的image欄位保存的是圖片的相對於storage/app/public/的相對路徑,需要轉成絕對路徑才能正常展示,我們可以給商品模型加一個訪問器來輸出絕對路徑,才能正常顯示。 - 開啟
\專案\app\Product.php,在底下加入一個方法:<?php namespace App; use Illuminate\Database\Eloquent\Model; use Storage; class Product extends Model { public function getImageUrlAttribute() { return Storage::disk('public')->url($this->attributes['image']); } }由於我們有用到
Storage物件,所以,記得在上面加上use Storage; - 函數名稱不能隨意亂取,假設我們希望在視圖中,可以用
$product->image_url的方式取得圖片的網址,那麼,將image_url改為大駝峰寫法(控制器規定的)就是ImageUrl。然後,在前面加上get,後面加上Attribute,這樣就完成了模型的函數名稱,即getImageUrlAttribute()。如此,只要使用該模型,就會自動執行該函數,並傳回image_url的資訊。 - 上面這個
getImageUrlAttribute()就是所謂的「自訂訪問器」,詳細可以參考:https://learnku.com/docs/laravel/5.8/eloquent-mutators/3934#accessors-and-mutators -
函數中的
Storage::disk('public')的參數public需要和我們在config/admin.php裡面的upload.disk設定一致。 - 關於
Storage物件的用法,可參考:https://learnku.com/docs/laravel/5.8/filesystem/3918#file-urls
10-3 修改控制器以執行取得資料動作
