web-dev-qa-db-ja.com

Laravel Novaフィールドを読み取り専用または保護されたものとして表示するように設定する方法は?

Laravel Nova(v1.0.3)内には、リソースフィールドの可視性をきめ細かく制御できるいくつかのメソッド(canSee、showOnDetailなど)があります。フィールドが編集可能かどうかを制御するメソッド。どのようにフィールドを表示し、ユーザーが編集できないようにする(読み取り専用にする)ことができますか?

たとえば、[作成日]フィールドを表示したいのですが、ユーザーが変更できないようにしたいとします。

6
Matt

この機能はv1.1.4(2018年10月1日)で追加されました。

  • Textおよびtextareaフィールドに任意の属性を設定できるようにします

使用例:

Text:: make('SomethingImportant')
    ->withMeta(['extraAttributes' => [
          'readonly' => true
    ]]),
10
Matt

V2.0.1以降、readonly()はネイティブであり、コールバック、クロージャー、またはブール値を受け入れ、次のように呼び出すことができます。

Text::make('Name')->readonly(true)

これは、このバージョンの前に追加された可能性がありますが、変更ログは、これが当てはまるかどうかを指定しません。

Nova v2.0のドキュメント

6
neil

_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');
_
2
Yazan Stash

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;
    }),
1
bernhardh

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;
            }
        }),
0

1.0.3以降これを行う方法はないと思います(ソースファイルに何も表示されません)。

ただし、Novaではフィールドタイプをさらに簡単に追加できるため、独自の「ReadOnly」フィールドをすばやく作成できます。

私はおそらくただ辛抱するでしょう-フィールドに属性を追加する機能はおそらく将来のリリースの機能になるでしょう。

このようなものはクールでしょう:

Text::make('date_created')
    ->sortable()
    ->isReadOnly()

または

Text::make('date_created')
    ->sortable()
    ->attributes(['readonly'])
0
Mediabeastnz