2017-03-01 3 views
3

Je suis en train de changer les champs accessibles BeforeSave si l'utilisateur est un gestionnaireModifier les champs accessibles BeforeSave utilisant le plugin CRUD [CakePHP 3]

$this->Crud->on('beforeSave', function(Event $event) { 
    if($this->Auth->user('role') == 'Manager') 
    { 
     $this->Crud->action()->saveOptions(['accessibleFields' => ['verified' => true]]); 
    } 
}); 

Mais il ne semble pas fonctionner, pourquoi? Éditer: Pour clarifier, j'essaye de faire une demande HTTP de PUT par mon API et change la valeur du champ "vérifié". Je peux changer tous les champs que j'ai définis pour être accessible dans mon entity.php, mais quand j'essaye de changer le champ "vérifié" après le beforeSave ci-dessus, je ne vois aucun changement dans l'objet, parce qu'il semble pas définir le champ a accessible.

Édition 2: De la documentation officielle du plugin CRUD, j'ai essayé de faire $this->Crud->action()->saveOptions(['atomic' => false]); mais je n'ai pas réussi à le faire fonctionner. J'ai envoyé un issue sur la page GitHub plugin crud j'espère obtenir plus de réponses là-bas.

Merci de votre aide.

+1

De quelle manière cela ne fonctionne-t-il pas? Que voyez-vous au lieu de votre comportement souhaité? – drmonkeyninja

+0

Cela ne changera pas le champ –

Répondre

0

que j'ai trouvé la solution avec ma question sur GitHub

$this->Crud->action()->config('saveOptions.accessibleFields', ['verified' => true]) 

je dois utiliser dans la méthode de mon contrôleur, je ne ai pas besoin du beforeSave. Mon code ressemble à ceci

if($this->Auth->user('role') == 'Manager') $this->Crud->action()->config('saveOptions.accessibleFields', ['verified' => true]); 
$this->Crud->on('afterSave', function(Event $event) { 
    /*[...]*/ 
}