J'essaie de modifier un formulaire où j'ai un message avec un titre, un corps et un slug, le slug est unique, donc si je le modifie et ne le mets pas à jour, il dit qu'il a déjà été pris
J'essaye ceci sur ma validation PostRequest:
public function store(PostStoreRequest $request) { $validated = $request->validated(); auth()->user()->posts()->create($validated); return redirect()->route('articulos.index'); }
la fonction sur le contrôleur Post est:
public function rules() { return [ 'title' => 'required', 'body' => 'required', 'metaTitle' => 'required', 'metaDescription' => 'required', 'slug' => ['required', Rule::unique('posts')->ignore($this->post)], ]; }
également sur mon formulaire de mise à jour de la lame que j'ai @method ('PUT')
4 Réponses :
Essayez ceci en espérant que cela fonctionnera
public function rules(Request $request) { return [ 'title' => 'required', 'body' => 'required', 'metaTitle' => 'required', 'metaDescription' => 'required', 'slug' => 'required|slug|unique:posts,slug,' . $this->post, ]; }
Maintenant, il dit "Variable non définie: posts (View: C: \ wamp64 \ www \ item.github \ resources \ views \ manager \ posts \ list .blade.php)"
'slug' => ['required', 'slug', Rule :: unique ('posts') -> ignore ($ this-> post, 'id')],
Ceci-> Post est votre identifiant d'objet post?
non, c'est tout le message, j'ai essayé ce que vous avez dit maintenant, j'ai eu une erreur différente "La méthode Illuminate \ Validation \ Validator :: validateSlug n'existe pas."
semble que $ this-post est vide
déboguer et vérifier ce que vous y arrivez
le message est vide, à partir de Request $ request, j'obtiens un gros objet, je peux accéder au slug ou au titre par exemple mais pas à l'ID ou au message
var_dump ($ request-> get ('key') et essayez
je ne sais pas ce qui se passe, en l'utilisant dans sa propre classe, cela indique que "Class App \ Http \ Requests \ PostStoreRequest n'existe pas"
var_dump cette publication et vérifier que vous y obtenez quelque chose?
oui, essayé var_dump ($ request-> get ('key'); exit (); sur PostStoreRequest.php où j'ai la validation des règles et cela renvoie cette erreur
Man var_dump ($ this-> post); essayez ce que vous obtenez faites le moi savoir
Dit vous, NULL, DUNNO Pourquoi je l'envoie de la forme,
C'est la seule solution que j'ai trouvée, utiliser mon propre validateur PostRequest ne fonctionne pas donc pour la mise à jour je valide dans la fonction de mise à jour:
public function update(Request $request, $id) { $request->validate([ 'slug' => 'required|unique:posts,slug,' . $id, 'title' => 'required', ]); $post = Post::find($id); $post->fill($request->all()); $post->save(); return redirect()->route('articulos.index'); }
Ce serait cool de savoir pourquoi cela se produit et comment le résoudre, mais cela fonctionne pour le moment
Veuillez essayer ceci pour la méthode Store
et Update
:
'slug' => [ 'required', 'slug', 'unique:posts,slug' . (isset($this->post) ? ',' . $this->post : ' ') ],
Je ne peux pas mettre cela sur ma validation PostRequest car $ this-> post est NULL, comment puis-je l'obtenir?
dans la méthode du magasin vous n'avez pas besoin et mettez à jour vous passez un identifiant puis récupérez le passage d'objet dans la méthode de validation, puis «unique: posts, slug». (isset ($ object-> slug)? ','. $ object-slug: '')
vous devriez essayer ceci:
public function rules() { $slug = $this->request->get("slug"); return [ 'title' => 'required', 'body' => 'required', 'metaTitle' => 'required', 'metaDescription' => 'required', 'slug' => ['required', Rule::unique('posts')->ignore($slug,'slug')], ]; }
fonctionne mais si vous essayez d'ajouter un slug qui n'est pas unique lors de sa création, il génère une erreur SQLSTATE [23000]: Violation de contrainte d'intégrité: 1062 Entrée dupliquée 'dasddas' pour la clé 'posts_slug_unique' mais la méthode de mise à jour fonctionne correctement
Vous êtes correct - cela ne fonctionnera que bien avec la mise à jour. Je pense que les demandes de création et de mise à jour doivent être séparées. En cas de création - se débarrasser de '-> Ignorer ($ limace,' Slug ')' Partie
J'ai fait deux demandes de validation, postStore et postUpdate et tout fonctionne bien, merci!