Laravel Nova (v1.0.3) 内には、リソース フィールドの可視性をきめ細かく制御できるメソッドがいくつかあります (canSee、showOnDetail など)。フィールドが編集可能かどうかを制御するメソッドが見つかりません。フィールドを表示し、ユーザーが編集できないようにする (読み取り専用にする) にはどうすればよいですか?
たとえば、「Created At」フィールドを表示したいのですが、ユーザーが変更できるようにしたくありません。
Laravel Nova (v1.0.3) 内には、リソース フィールドの可視性をきめ細かく制御できるメソッドがいくつかあります (canSee、showOnDetail など)。フィールドが編集可能かどうかを制御するメソッドが見つかりません。フィールドを表示し、ユーザーが編集できないようにする (読み取り専用にする) にはどうすればよいですか?
たとえば、「Created At」フィールドを表示したいのですが、ユーザーが変更できるようにしたくありません。
App\Laravel\Nova\Fields\Field
はマクロ可能であるため、独自のメソッドを簡単に追加して読み取り専用にすることができます。
呼び出しのApp\Providers\NovaServiceProvider
後にこの関数を追加できますparent::boot()
\Laravel\Nova\Fields\Field::macro('readOnly', function(){
$this->withMeta(['extraAttributes' => [
'readonly' => true
]]);
return $this;
});
そして、このようにチェーンすることができます
Text::make("UUID")->readOnly()->help('you can not edit this field');
July 2021, For Nova version 3.0
, the readonly
method can accept different types of arguments
Default:
Text::make('Email')->readonly()
Direct boolean:
Text::make('Email')->readonly(true/false)
Closure:
Text::make('Email')->readonly(function ($request) {
return !$request->user()->isNiceDude();
}
Read more here https://nova.laravel.com/docs/3.0/resources/fields.html#readonly-fields