📖

Laravel-Adminの管理画面から画像やファイルをアップロードする

2021/09/10に公開

Laravel-Adminで管理画面を作ることはよくあるかと思います。

Laravel-Adminから画像やファイルの投稿について調べながら実装したので、メモがてら残しておきたいと思います。

どのディレクトリにアップされるか調べる

config/admin.phpupload の部分を見てみます。
僕の場合はこうなっていました。

    /*
    |--------------------------------------------------------------------------
    | Laravel-admin upload setting
    |--------------------------------------------------------------------------
    |
    | File system configuration for form upload files and images, including
    | disk and upload path.
    |
    */
    'upload' => [

        // Disk in `config/filesystem.php`.
        'disk' => 'admin',

        // Image and file upload path under the disk above.
        'directory' => [
            'image' => 'images',
            'file'  => 'files',
        ],
    ],

diskにはadminを使いますよーっていうことですね。
画像系はimagesディレクトリ、ファイル系はfilesディレクトリにアップロードされるそうです。

adminのdiskはどのように指定されているかみてみます。

config/filesystem.php を確認してみます。

もしdisksの中にadminがなければ追加してください

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'admin' => [
	    'driver' =>'local',
	    'root' => public_path('uploads'),
	    'visibility' =>'public',
	    'url' => env('APP_URL').'/uploads',
	],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT'),
        ],
    ],

こちらの内容を見ると管理画面から投稿されるファイルや画像は env('APP_URL').'/uploads' に保存されるようになっています。

では、早速画像やファイルをアップロードできるようにControllerを書き換えてみます。

AdminのControllerを書き換える

php artisan admin:make UserController --model=App\\Models\\User

このようにすると管理画面用のControllerが作成されます。このformの部分を書き換えます。

   /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = new Form(new User());
	.
	.
	. 
        $form->image('profile_image_path', 'プロフ画像')->uniqueName();
	.
	.
	.
       
        return $form;
    }

僕はファイル名が被らないように uniqueName をつけてファイル名をユニークなものに変えるようにしました。
ディレクトリを変えたい場合は $form->image('profile_image_path', 'プロフ画像')->move('profiles')->uniqueName(); のようにプロフィールディレクトリを切ってそこに格納することもできます。

終わりに

Laravel-Adminの管理画面から画像をアップロードするのは結構簡単でした。
あまり2次情報・3次情報は豊富にはないので、Larave-Adminの公式ドキュメントを見て試すのが一番いいですね。

Discussion