web-dev-qa-db-fra.com

Comment définir un Laravel Champ Nova à afficher comme en lecture seule ou protégé?

Dans Laravel Nova (v1.0.3), plusieurs méthodes permettent d’optimiser le contrôle de la visibilité d’un champ de ressource (canSee, showOnDetail, etc.). Je ne trouve aucune méthode permettant de contrôler si un champ est modifiable. Comment puis-je afficher un champ tout en empêchant l'utilisateur de le modifier (le lire en lecture seule)?

Par exemple, j'aimerais afficher le champ "Créé à", mais je ne souhaite pas que l'utilisateur puisse le modifier.

2
Matt

Cette fonctionnalité a été ajoutée à la v1.1.4 (1 er octobre 2018).

  • Autoriser la définition de tout attribut sur les champs text et textarea

Exemple d'utilisation: 

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

Puisque App\Laravel\Nova\Fields\Field est macroable vous pouvez facilement ajouter votre propre méthode pour le rendre en lecture seule, e.x.

dans App\Providers\NovaServiceProvider, vous pouvez ajouter cette fonction après l'appel parent::boot()

\Laravel\Nova\Fields\Field::macro('readOnly', function(){
    $this->withMeta(['extraAttributes' => [
        'readonly' => true
    ]]);

    return $this;
});

et alors vous pouvez l'enchaîner comme ça

Text::make("UUID")->readOnly()->help('you can not edit this field');
1
Yazan Stash

Vous pouvez également utiliser la fonction canSee. Dans mon cas, je ne pouvais pas utiliser la solution withMeta car j'avais besoin que certains de mes utilisateurs (administrateurs) puissent modifier le champ, mais pas d'un utilisateur normal.

Exemple: 

     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
Calvin Schemanski

À partir de 1.0.3 Je ne crois pas qu'il y ait un moyen de faire cela (rien ne peut être vu dans le fichier source).

Cependant, vous pouvez rapidement créer votre propre champ "ReadOnly", car Nova facilite l'ajout de types de champs.

Je serais probablement patient, cependant - la possibilité d'ajouter des attributs aux champs sera probablement une fonctionnalité dans les versions futures.

Quelque chose comme ça serait cool:

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

ou

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