Hướng dẫn fix lỗi "Driver [] is not supported" trong Laravel

Hiện tượng lỗi

  • Laravel từ chối cho bạn thực hiện các thao tác truy cập (GET), tải lên hay lưu (PUT) file thông qua Storage class
  • Quá trình xử lý Route trả về Response có status code 500
  • Laravel Oops hiển thị các Error Log (Exception) tương tự như:
    • InvalidArgumentException Driver [] is not supported
    • InvalidArgumentException Driver [dropbox] is not supported
    • InvalidArgumentException Driver [sftp] is not supported
    • InvalidArgumentException Driver [s3] is not supported
    • ..

InvalidArgumentException Driver [] is not supported

Ý nghĩa lỗi

Laravel không thể nhận dạng Storage driver mà bạn đang muốn sử dụng.

Nguyên nhân

  • Do bạn khai báo sai tên driver trong config/filesystems.php
  • Do bạn chưa cài thư viện driver mà mà bạn đang muốn sử dụng
  • Do autoload của Laravel chưa cập nhật folder driver mà bạn đã đưa vào thư mục vendor
  • Do bạn chưa build lại Config Cache (trong trường hợp bạn đã build cache trước đó)

Cách khắc phục (fix)

Bước 1. Kiểm tra lại tên driver mà bạn đã khai báo trong config/filesystems.php

Bạn mở file config → filesystems.php và kiểm tra thông tin driver bên trong các disk mà bạn đã khai báo trước đó. Ví dụ:

'disks' => [
  'public' => [
     'driver' => 'local', // Kiểm tra property này
     'root' => base_path('public'),
     'url' => env('APP_URL').'/',
     'visibility' => 'public',
  ],
..
],

Thông thường, các coder thường mắc lỗi quên (chưa) khai báo driver cho disk, hay khai báo sai tên driver.

Bước 2. Kiểm tra xem bạn đã cài đặt packpage (gói/thư viện) driver cho project Laravel của bạn

Ngoại trừ các driver mặc định được hỗ trợ sẵn trong Framework Laravel như localftp, các driver khác như sftp, s3dropbox, googledrive, onedrive... đều cần sự hỗ trợ từ các package được cài đặt bổ sung vào project Laravel. Để kiểm tra xem bạn cài đặt package cho Storage driver mà bạn đang sử dụng chưa, ta kiểm tra 2 vị trí sau:

  • File composer.json (bên trong property requirerequire-dev)
  • Thư mục packpage của driver đã xuất hiện bên trong thư mục vendor hay chưa

Sau khi kiểm tra, nếu bạn nhận thấy rằng packpage (gói/thư viện) của driver mà bạn đang sử dụng chưa được cài đặt, hãy tiến hành cài đặt nó. Bạn có thể dễ dàng cài đặt bất kỳ một packpage nào thông qua command composer require package-name.

Bước 3. Tạo lại autoload cho project Laravel

Trong một số trường hợp, vì một lý do nào đó mà các file autoload của project Laravel chưa khớp với các package có trong thư mục vendor, từ đó dẫn đến hiện tượng Laravel không nhận dạng package mặc dù nó đã xuất hiện trong thư mục vendor và composer.json.

Bạn có thể dễ dàng tạo lại autoload thông qua command composer dump-autoload

Bước 4. Thử xoá Config Cache

Như đã phân tích ở phần Nguyên nhân, Config Cache cũng là một trong những yếu tố khiến project Laravel của bạn không thể nhận dạng Storage driver. Chính vì thế, ta hãy thử xoá config cache thông qua command php artisan config:clear.

Đăng ký để nhận được thông báo mỗi khi có bài viết mới!