• Laravel

LaravelとBackpackで構築した管理画面をカスタマイズする

LaravelとBackpackで構築した管理画面をカスタマイズする

先日ご紹介した Laravel-Backpack について、項目の追加や画像アップロード機能を追加する方法について紹介していきます。

もしLaravel-Backpackのセットアップから行いたいという方は、以前の記事からご覧ください。

項目の追加

以前の記事でユーザー管理画面を生成しましたが、そこに項目を追加する手順をご紹介します。

テーブルのカラム追加

テーブルにカラムを追加するマイグレーションファイルを生成するような機能がLaravel-Backpackそのものには用意されてないようです。
今回はマニュアルにも記載されている laracasts/Laravel-5-Generators-Extended を使ってマイグレーションファイルを作ってみたいと思います。

まずはパッケージをcomposerでインストールします。


composer require --dev laracasts/generators

次にマイグレーションファイルを生成し、実行します。
今回は例として、usersテーブルに、ふりがな用の項目を追加します。


php artisan make:migration:schema add_users_table --schema="name_kana:string:nullable:after('name')"
php artisan migrate

追加、編集項目への追加

次に、先ほど追加した、ふりがな用の「name_kana」をユーザー管理画面の追加、編集画面に項目として表示させます。
変更するファイルは2つです。

最初にコントローラーファイル「app/Http/Controllers/Admin/UserCrudController.php」の「setupCreateOperation」メソッドを変更します。
次のように「CRUD::field('name_kana');」を追加します。


    protected function setupCreateOperation()
    {
        CRUD::setValidation(UserRequest::class);

        CRUD::field('name');
        CRUD::field('name_kana');    // 追加
        CRUD::field('email');
        CRUD::field('password');

上の手順で管理画面のユーザー追加、編集画面に「Name kana」の項目が表示されます。
これだけではデータベースには保存されないので、ユーザーのモデルファイル「app/Models/User.php」を変更します。
次のように「$fillable」配列に「'name_kana',」を追加します。


    protected $fillable = [
        'name',
        'name_kana',    // 追加
        'email',
        'password',
    ];

これでユーザーの追加、編集画面に「Name kana」が表示され、保存時にデータベースに反映されるようになります。

画像アップロード

ユーザーに画像項目を追加し、追加、編集画面でアップロードできるようにします。
まずは上の手順と同様に「users」テーブルに「image」カラムを追加します。

テーブルのカラム追加


php artisan make:migration:schema add_users_table --schema="image:string:nullable:after('password')"

追加、編集項目への追加

次に、先ほど追加した、画像用の「image」をユーザー管理画面の追加、編集画面に項目として表示させます。
変更するファイルは2つです。

コントローラーファイル「app/Http/Controllers/Admin/UserCrudController.php」の「setupCreateOperation」メソッドを変更します。
次のように「CRUD::field('image')...」を追加します。


    protected function setupCreateOperation()
    {
        CRUD::setValidation(UserRequest::class);

        CRUD::field('name');
        CRUD::field('name_kana');
        CRUD::field('email');
        CRUD::field('password');
        CRUD::field('image')->type('upload')->upload(true);    // 追加

次に、ユーザーのモデルファイル「app/Models/User.php」を変更します。
まず「$fillable」配列に「'image',」を追加します。


    protected $fillable = [
        'name',
        'name_kana',
        'email',
        'password',
        'image',    // 追加
    ];

次に、アップロードされたファイルを保存する処理を「app/Models/User.php」に追加します。


    public function setImageAttribute($value)
    {
        $attribute_name = "image";
        $disk = "public";
        $destination_path = "uploads";

        $this->uploadFileToDisk($value, $attribute_name, $disk, $destination_path);
    }

以上の手順でユーザーの追加、編集画面に画像アップロード用の項目が追加されます。
最後にブラウザからアップロード先のファイルにアクセスできるようシンボリックリンクを張ります。


php artisan storage:link

一覧、詳細ページでの画像表示

以上の状態だと一覧ページには画像は表示されず、詳細ページでは画像のパスが文字として表示されるのみで不親切だと思います。
実際の画像として見える形に変更します。

まず一覧ページに画像が表示されるよう項目を追加します。
コントローラーファイル「app/Http/Controllers/Admin/UserCrudController.php」の「setupListOperation」メソッドを変更します。
次のように「CRUD::field('image')...」を追加します。


    protected function setupListOperation()
    {
        CRUD::column('name');
        CRUD::column('email');
        CRUD::column('password');
        CRUD::column('image')->type('image')->prefix('storage/')->crop(true)->aspectRatio(1);    // 追加

次に詳細ページに画像として表示されるようメソッドを追加します。
コントローラーファイル「app/Http/Controllers/Admin/UserCrudController.php」に「setupShowOperation」メソッドを追加します。


    protected function setupShowOperation()
    {
        $this->autoSetupShowOperation();
        CRUD::column('image')->type('image')->prefix('storage/')->crop(true)->aspectRatio(1);
    }

まとめ

Laravel-Backpackの管理画面にテキストや画像項目を追加する方法についてご紹介しました。
画像のアップロードについてはHTML標準のアップロードになるため不親切ですが、有料版を購入すると、もう少し便利なUIでも実装できるようです。
もし本格的にLaravel-Backpackを使って管理画面を構築する際は検討したほうが良いと思います。

  • Laravel
宮野 比伊呂

MIYANO HIIRO Chief Technology Officer / 宮野 比伊呂

記事をもっと見る

Our Signature Products, Born from Insight.

提案から生まれた、
MARBLEの代表プロダクト

お客様の課題を起点に、MARBLEが自ら構想し、
仕組みからデザイン、開発、運用まで一貫してつくり上げたプロダクト群です。
業務改善、運営効率化、新たな顧客体験の創出など、
企業の事業成長に直結する“実装された解決策”を形にしています。

  1. 01 入退場システム

    Entry System

    入退場システムのイメージ

    全国15店舗、会員数50万人以上のこども向けパークで稼働する入退場・決済・顧客管理システム。
    受付の効率化と回転率の向上を実現し、運営データの一元管理を可能にしています。

  2. 02 自動配送システム

    Delivery Routing

    50台のトラック、年間350日の配送を最適化する自動ルート生成システム。
    紙のFAXで届く約500件の配送情報をデジタル化し、最適ルートを自動で算出することで、大幅な業務効率化を実現しました。

  3. 03 会話型コマース連携

    Auto Routing

    ライブチャットでの接客からEC購入までを一つの導線でつなぐ会話型コマースシステム。
    リアルタイムの対話で顧客の購買意欲を高め、高いコンバージョン率につながる仕組みを構築しています。