LoginSignup
6
7

More than 3 years have passed since last update.

Laravel-admin で アバターを非表示にする

Posted at

やりたいこと

Laravel-adminをいれるとデフォルトで管理者ユーザーにアバターが振られていて
しかも、管理者編集から画像を消そうにもデフォルトでセットされる

スクリーンショット 2020-03-26 0.25.09.png

うざいので消します

やりかた

下記のように管理者ユーザーテーブルのアバターはnullを許可されているので問題有りません

 Schema::create(config('admin.database.users_table'), function (Blueprint $table) {
            $table->increments('id');
            $table->string('username', 190)->unique();
            $table->string('password', 60);
            $table->string('name');
            $table->string('avatar')->nullable();
            $table->string('remember_token', 100)->nullable();
            $table->timestamps();
        });

次に、Administratorという管理者のモデルをみると
下記のようにavatarのアクセサが定義されているのですが
そこでnullだとlaravel-admin側で用意した画像を使うようになっています

vendor/encore/laravel-admin/src/Auth/Database/Administrator.php
    /**
     * Get avatar attribute.
     *
     * @param string $avatar
     *
     * @return string
     */
    public function getAvatarAttribute($avatar)
    {
        if (url()->isValidUrl($avatar)) {
            return $avatar;
        }

        $disk = config('admin.upload.disk');

        if ($avatar && array_key_exists($disk, config('filesystems.disks'))) {
            return Storage::disk(config('admin.upload.disk'))->url($avatar);
        }

        $default = config('admin.default_avatar') ?: '/vendor/laravel-admin/AdminLTE/dist/img/user2-160x160.jpg';

        return admin_asset($default);
    }

なのでこいつを編集してやります
app/Admin/Models/Administrator.phpを作成
中身をコピーし、下記のように書き換えます。また、一つgetPlainAvatarAttributeというアクセサを追加してやります。


    public function getPlainAvatarAttribute()
    {
        return $this->getOriginal("avatar");;
    }

    /**
     * Get avatar attribute.
     *
     * @param string $avatar
     *
     * @return string
     */
    public function getAvatarAttribute($avatar)
    {
        if (URL::isValidUrl($avatar)) {
            return $avatar;
        }

        $disk = config('admin.upload.disk');

        if ($avatar && array_key_exists($disk, config('filesystems.disks'))) {
            return Storage::disk(config('admin.upload.disk'))->url($avatar);
        }

        $default = config('admin.default_avatar') ?: null;

        return admin_asset($default);
    }

その後admin.php
Encore\Admin\Auth\Database\Administrator::class,となっているところを
App\Admin\Models\Administrator::class,に変更します

これだけだと、画面で画像ありませんマークがでてしまうので
view側もいじります。

vendor/encore/laravel-admin/resources/viewsを丸々コピーし
resources/views/laravel-adminというディレクトリを作成し格納します。

app/Admin/bootstrap.phpに下記の一文を追加し、viewの参照を変更。

app/Admin/bootstrap.php
app('view')->prependNamespace('admin', resource_path('views/laravel-admin'));

sidebarとheaderの修正をします

@if(Admin::user()->plainAvatar)
<img src="{{ Admin::user()->avatar }}" class="img-circle" alt="User Image">
@endif

これで、きえました

スクリーンショット 2020-03-26 0.43.26.png

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7