Bonjour,
Voila je rencontre un petit problème avec mon code.
J'essais d'auto généré un slug apartir de son nom. Je veux que les règles de validation le détecter ce changement.
// RoleRequest
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
if (empty($this->input('slug'))) {
$this['slug'] = str_slug($this->input('name'));
} else {
$this['slug'] = str_slug($this->input('slug'));
}
$rules = [
'name' => 'required|string|min:5|max:255|unique:roles',
'slug' => 'required|string|min:5|max:255|unique:roles'
];
if ($roles = $this->route('role')) {
$rules['slug'] .= ',slug,' . $roles->id;
}
return $rules;
}
// RolesController
/**
* @param Role $role
* @param RoleRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function update(RoleRequest $request, Role $role)
{
$role->update($request->all());
return redirect(route('backend.roles.index'))->with('success', "The role was created");
}
Quand je fait un dd($rules) j'obtient ceci :
array: [
"name" => "required|string|min:5|max:255|unique:roles"
"slug" => "required|string|min:5|max:255|unique:roles,slug,1"
]
je fait un dd($this->input()) pour voir les donnés du champs j'ai ceci :
array: [
"_method" => "PUT"
"_token" => "qRpjXe4lhVnzrjaq8gxwDXeNV6qznQsewE4lEpFZ"
"id" => "1"
"name" => "Member"
"slug" => "member"
]
Les règles de validation accepte ce changement si un utilisateur laisse le champ "slug" vide.
J'ai une erreur qui dit que le champ "slug" ne peut pas être vide. Pourtant dans ma RoleRequest j'ai ce système qui auto dévine le slug depuis son nom. En téorie ça doit passé les règle de validation?
Merci de votre aide
Bonjour J'ai éssayé votre code. Il faut que j'enlève toute les règles de validations dans mon slug?
$rules = [
'name' => 'required|string|min:5|max:255|unique:roles',
'slug' => 'required|string|min:5|max:255|unique:roles'
];
par
$rules = [
'name' => 'required|string|min:5|max:255|unique:roles',
'slug' => ''
];
Il y a pas d'autre moyen?
Merci @Gregk! j'ai trouver une solution pour garder mes règle de validation sur l'unique et pour palier le problème de mises-à-jours de contentenu. :
public function rules()
{
if (empty($this->input('slug'))) {
$this['slug'] = str_slug($this->input('name'));
} else {
$this['slug'] = str_slug($this->input('slug'));
}
$rules = [
'name' => [
'required',
'string',
'max:255',
Rule::unique('roles')->ignore($this->id)
],
'slug' => 'max:255|unique:roles'
];
if ($roles = $this->route('role')) {
$rules['slug'] .= ',slug,' . $roles->id;
}
return $rules;
}