:::

10-4 修改模型以正確顯示圖片

  1. 在控制器中,我們利用Product模型的all()方法來取得商在資料庫中的資料,但其中圖片到時候沒有辦法正常顯示,這是因為商品的 image 欄位保存的是圖片的相對於 storage/app/public/ 的相對路徑,需要轉成絕對路徑才能正常展示,我們可以給商品模型加一個訪問器來輸出絕對路徑,才能正常顯示。

  2. 開啟\專案\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;

  3. 函數名稱不能隨意亂取,假設我們希望在視圖中,可以用 $product->image_url 的方式取得圖片的網址,那麼,將image_url 改為大駝峰寫法(控制器規定的)就是ImageUrl。然後,在前面加上get,後面加上Attribute,這樣就完成了模型的函數名稱,即getImageUrlAttribute()。如此,只要使用該模型,就會自動執行該函數,並傳回image_url的資訊。
  4. 上面這個getImageUrlAttribute()就是所謂的「自訂訪問器」,詳細可以參考:https://learnku.com/docs/laravel/5.8/eloquent-mutators/3934#accessors-and-mutators
  5. 函數中的 Storage::disk('public') 的參數 public 需要和我們在 config/admin.php 裡面的 upload.disk 設定一致。

  6. 關於Storage物件的用法,可參考:https://learnku.com/docs/laravel/5.8/filesystem/3918#file-urls

到GitHub觀看此單元程式異動


:::

書籍目錄

展開 | 闔起

http%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D43%26tbdsn%3D1423

計數器

今天: 1471147114711471
昨天: 1416141614161416
總計: 7340118734011873401187340118734011873401187340118