Laravel Nova(v1.0.3)内には、リソースフィールドの可視性をきめ細かく制御できるいくつかのメソッド(canSee、showOnDetailなど)があります。フィールドが編集可能かどうかを制御するメソッド。どのようにフィールドを表示し、ユーザーが編集できないようにする(読み取り専用にする)ことができますか?
たとえば、[作成日]フィールドを表示したいのですが、ユーザーが変更できないようにしたいとします。
この機能はv1.1.4(2018年10月1日)で追加されました。
使用例:
Text:: make('SomethingImportant')
->withMeta(['extraAttributes' => [
'readonly' => true
]]),
V2.0.1以降、readonly()はネイティブであり、コールバック、クロージャー、またはブール値を受け入れ、次のように呼び出すことができます。
Text::make('Name')->readonly(true)
これは、このバージョンの前に追加された可能性がありますが、変更ログは、これが当てはまるかどうかを指定しません。
_App\Laravel\Nova\Fields\Field
_はmacroableなので、独自のメソッドを簡単に追加して、読み取り専用にすることができます。
_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');
_
Nova >2.0
以降では、readonlyメソッドをコールバックで使用して、リソースを確認できます。
Text::make("Read Only on Update")
->readonly(function() {
return $this->resource->id ? true : false;
}),
またはさらに良い:
Text::make("Read Only on Update")
->readonly(function() {
return $this->resource->exists;
}),
canSee
関数を使用することもできます。私の場合、withMeta
ソリューションを使用できませんでした。何人かのユーザー(管理者)がフィールドを編集できるが、通常のユーザーはできないためです。
例:
Number::make('Max Business Locations')
->canSee(function ($request) {
//checks if the request url ends in 'update-fields', the API
//request used to get fields for the "/edit" page
if ($request->is('*update-fields')) {
return $request->user()->can('edit-subscription');
} else {
return true;
}
}),
1.0.3以降これを行う方法はないと思います(ソースファイルに何も表示されません)。
ただし、Novaではフィールドタイプをさらに簡単に追加できるため、独自の「ReadOnly」フィールドをすばやく作成できます。
私はおそらくただ辛抱するでしょう-フィールドに属性を追加する機能はおそらく将来のリリースの機能になるでしょう。
このようなものはクールでしょう:
Text::make('date_created')
->sortable()
->isReadOnly()
または
Text::make('date_created')
->sortable()
->attributes(['readonly'])