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

うざいので消します
やりかた
下記のように管理者ユーザーテーブルのアバターは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側で用意した画像を使うようになっています
/**
* 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('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
これで、きえました
