🙆‍♀️

Laravel-adminでテキストエディタを作る。画像アップロードあり

2021/12/11に公開

Laravel-adminでブログ機能などを作るときに、テキストエディタが欲しい時があります。

1回Laravel-Adminで構築したときに、画像アップロードの機能の付け方が分からなかったのですが、再チャレンジしてみたところ、結構簡単にできたので、メモがてら残しておきたいと思います。

テキストエディタを設定する

ckeditorをインストール

composer require laravel-admin-ext/ckeditor

設定ファイルの出力

php artisan vendor:publish --tag=laravel-admin-ckeditor

config/admin.php を編集します

    'extensions' => [

        'ckeditor' => [
        
            //Set to false if you want to disable this extension
            'enable' => true,
            
            // Editor configuration
            'config' => [
                
            ]
        ]
    ]

formにテキストエディタを設置する

$form->ckeditor('content');

これだけで、テキストエディタが設置できました!

画像アップロードできるようにする

初期設定の画像アップロードではURLを入力してその画像を表示するという機能なので、画像をアップロードして表示するということができません。

なので、画像をアップロードして文の途中に入れられるようにします。

admin.phpのextensionsに追記します。
この/admin/uploadは、画像アップロードした際に処理を行うURLです。

    'extensions' => [
        'ckeditor' => [
	
            'enable' => true,

            'config' => [
                'filebrowserImageUploadUrl' => '/admin/upload', // 追記する
            ]
        ]
    ],

では、このURLのルーティング設定を行います。

Admin/route.phpに追記します。

$router->post('/upload', 'FileUploadController@index');

処理するためのコントローラを作ります。

app/Admin/Controllers/UploadController.php を作成して、indexメソッドを作ります。

<?php

namespace App\Admin\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class FileUploadController extends Controller
{

    public function index(Request $request)
    {
        $image = $request->file('upload');

        $path = $image->store('/admin/image', 'admin'); // ランダム文字列のファイル名で保存する
        $fileName = pathinfo($path)['basename']; // 保存後のファイル名を取得

        $url = "/uploads/admin/image/" . $fileName; // アップロードした後に画像が見れるURLを設定してください

        $param = [
            'uploaded' => 1,
            'fileName' => $fileName,
            'url'      => $url
        ];

        return response()->json($param, 200);
    }
}

この画像アップロードの時はCSRFを無効にする

app/Http/Middleware/VerifyCsrfToken.php に追記します。

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        '/admin/upload',
    ];
}

これで、画像アップロードして挿入することも可能になりました。

Laravel-adminがめちゃめちゃ便利ですね。

Discussion