😀

Laravel-Adminで新しいページを作成し独自のフォームを作る

2021/10/25に公開

こんにちは、最近よくLaravel-Adminを使用することが多いので、今回もLaravel-Adminで学んだことを記事にします。

今回は画像を複数アップロードできるページが欲しいなあと思いまして、新規ページを作成しました。

Formを作成する

早速表示したいフォームを作成します。

app/Admin/Forms/UploadImagesForm.php を作成します。
Formsディレクトリがない方は新規で作っていただいて大丈夫です。

こちらはただの複数画像をアップロードして、全てS3に保存するというだけのサンプルプログラムです。
formメソッドでどんなフォームを表示したいか、handleメソッドでリクエスト送信後にどのような処理をしたいかを記入します。

<?php

namespace App\Admin\Forms;

use Encore\Admin\Widgets\Form;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class UploadImagesForm extends Form
{
    /**
     * The form title.
     *
     * @var string
     */
    public $title = '画像アップロード';

    /**
     * Handle the form request.
     *
     * @param Request $request
     *
     * @return \Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request)
    {
        $images = $request->file('images');

        foreach ($images as $image) {
            $path = Storage::disk("s3")->put("/images", $image);
        }

        admin_success('Processed successfully.');

        return back();
    }

    /**
     * Build a form here.
     */
    public function form()
    {
        $this->multipleImage('images');
    }

    /**
     * The data of the form.
     *
     * @return array $data
     */
    public function data()
    {
        return [
        ];
    }
}

Controllerを作成する

Formを表示するためのControllerを作成します。

app/Admin/Controllers/UploadImagesController を作成します。

<?php

namespace App\Admin\Controllers;

use App\Admin\Forms\UploadImagesForm;
use App\Http\Controllers\Controller;
use Encore\Admin\Layout\Content;
use Encore\Admin\Widgets\Tab;

class UploadImagesController extends Controller
{
    public function show(Content $content)
    {
        return $content
            ->title('画像アップロード')
            ->body(new UploadImagesForm());
    }
}

このように$contentを返してあげると、Laravel-Adminのヘッダーやサイドバーもついた見た目になり、先ほど作成した独自のフォームが表示されます。


# ルーティングを作成する

そしてこのコントローラを呼び出すためのルーティングを作成します。

`app/Admin/routes.php` に追記します。

$router->get('uploadImages', [UploadImagesController::class, 'show']);


キャッシュを削除して( `php artisan optimize` )から `/admin/uploadImages` にアクセスすると、独自フォームが表示されます。


# 終わりに

なかなか調べてもいい記事が出てこなくて大変でしたが、
一回やってしまうと簡単ですね!
ぜひ参考にしていただけると嬉しいです。

Discussion