Bonjour,
Voila je rencontre un petit problème avec mon code.
J'essais de forcer à ignorer la règle 'unique' quand je suis dans une situation de mise à jours d'un contenu
// List des règles de validation de mon fichier ProjectRequest
$rules = [
'name' => 'required|min:5|max:255',
'slug' => 'required|min:5|max:255|unique:projects',
'content' => 'required|min:10',
'website' => 'nullable|url',
'client_name' => 'nullable',
'video' => 'nullable|url'
];
Si on modifier pas le slug et que on est dans un status "update". La règle 'unique sois ignoré'. Si on modifier le champ slug la règle va s'appliquer.
J'ai regardé dans la documentation de Laravel à propos des règle de validation. Il est est voici la syntaxe pour la règle de validation unique "
unique:table,column,except,idColumn
The field under validation must be unique in a given database table. If the column option is not specified, the field name will be used.
Dans mon ProjectsRequest j'ai essayé de suivre cette syntaxe :
$this['slug'] = str_slug($this->input('slug'));
$rules = [
'name' => 'required|min:5|max:255',
'slug' => 'required|min:5|max:255|unique:projects',
'content' => 'required|min:10',
'website' => 'nullable|url',
'client_name' => 'nullable',
'video' => 'nullable|url'
];
// If it's update case and
// $project return the ID
if ($project = $this->route('project')) {
$rules['slug'] .= ',slug,' . $project;
}
return $rules;
J'utilise dans mon controller ProjectsController la ProjetRequest
public function update(ProjectRequest $request, Project $project)
{
$project->update($request->all());
return redirect(route('backend.projects.index'))->with('success', "Your project has been updated");
}
La règle n'est pas ignorée et j'ai une erreur de validation disans que ce slug est déjà pris.
Merci de votre aide.
Étrangement le problème c'est réglé :
J'ai remplacer ceci :
if ($project = $this->route('project')) {
$rules['slug'] .= ',slug,' . $this->get('id');
}
par ceci :
if ($project = $this->route('project')) {
$rules['slug'] .= ',slug,' . $project->id;
}
Merci de votre aide. Si vous avez une meilleure solution je suis partent. Merci pour votre aide.
Moi perso je ne modifie pas les slug et je ne crois pas que ça soit conseiller(même s'il n'est pas interdi de le faire) de modifier les sulg surtout pour des critères de référencements.
Tu créés 2 classes request, une pour la création et une pour l'ajout avec des régles différentes.
Bonjour,
Je modifie le slug car l'utililisateur ne doit pas être oubligé d'écrire son slug mon-slug dans le champs. Ma classe le fait à sa place. Pour répondre à Palvich4, j'ai mis un système de brouillons. Dès que tu clique sur créer un nouveau projet. J'ai une fonctionalité qui fait un findOrCreate dans mon model projet :
public static function draft() {
return self::firstOrCreate(['name' => null], ['content' => '', 'draft' => 1]);
}
// Dans ma fonction create
public function create()
{
$project = Project::draft();
return redirect(route('backend.projects.edit', $project));
}
Je prévois mettre un système de fichier attachés. Je prépare juste le terrain.
Je me suis inspirée d'un code trouver sur gitub :
https://github.com/Grafikart/BlogMVC-Laravel/blob/9100f751598ad7adfd87410fb9ae650052b4f95e/app/Http/Requests/PostRequest.php