input('ingredients_list', []) as $key => $value) { $value = array_merge( $value, ['is_proportionnal' => filter_var($value['is_proportionnal'] ?? false, FILTER_VALIDATE_BOOLEAN)] ); $arrayIngredientList = array_merge($arrayIngredientList, [$key => $value]); } $this->merge([ 'highlight' => $this->boolean('highlight'), 'published' => $this->boolean('published'), 'ingredients_list' => $arrayIngredientList, 'consumption_moments' => collect($this->input('consumption_moments', [])) ->pluck('id') ->filter() ->values() ->all(), ]); $this->mergePicture('picture'); foreach (['advice_picto', 'tips_picto'] as $picto) { $this->mergePicture($picto); // icon removed: mergePicture() returns [] instead of null if ($this->input($picto) === []) { $this->merge([$picto => null]); } } } /** * Get the validation rules that apply to the request. */ public function rules(): array { $rules = [ 'seo_title' => 'required|min:45|max:70', 'seo_description' => 'required|min:50|max:160', 'title' => 'required|string|between:3,255', 'picture_alt' => 'required_with:picture|nullable|between:3,255', 'picture_title' => 'required_with:picture|nullable|between:3,255', 'ingredients_list.*' => 'required|array', 'ingredients_list.*.value' => 'sometimes|nullable|decimal:0,2|between:1,1000', 'ingredients_list.*.label_unit' => [ 'required_with:ingredients_list.*.label_unit', 'sometimes', 'nullable', 'string', 'between:1,255', ], 'ingredients_list.*.label_value' => 'required|string|between:3,255', 'ingredients_list.*.is_proportionnal' => 'required|boolean', 'preparation' => 'required|string|min:15', 'preparation_title' => 'required|string|between:3,255', 'video_id' => 'sometimes|nullable|integer|exists:videos,id', 'consumption_moments' => 'required|array|min:1|max:4', 'consumption_moments.*' => 'required|integer|distinct|exists:consumption_moments,id', 'products' => 'required|array', 'products.*' => 'required|integer|exists:products,id', 'preparation_time' => 'required|numeric|between:1,1000', 'cooking_time' => 'nullable|numeric|between:0,1000', 'nb_guests' => 'required|numeric|between:1,50', 'difficulty' => ['required', new Enum(DifficultyEnum::class)], 'highlight' => 'required|boolean', 'published' => 'required|boolean', 'advice_title' => 'nullable|string|between:3,255', 'advice' => ['nullable', 'string', new WysiwygLength(min: 15, max: 500)], 'advice_picto_alt' => 'required_with:advice_picto|nullable|between:3,255', 'advice_picto_title' => 'required_with:advice_picto|nullable|between:3,255', 'tips_title' => 'nullable|string|between:3,255', 'tips' => ['nullable', 'string', new WysiwygLength(min: 15, max: 500)], 'tips_picto_alt' => 'required_with:tips_picto|nullable|between:3,255', 'tips_picto_title' => 'required_with:tips_picto|nullable|between:3,255', ]; return \array_merge( $rules, $this->pictureRules('picture', 720, 405, 720, 405), $this->pictureRules('advice_picto', 45, 45, 45, 45, nullable: true), $this->pictureRules('tips_picto', 45, 45, 45, 45, nullable: true), ); } /** * Get custom attributes for validator errors. */ public function attributes(): array { return [ 'seo_title' => trans('validation.custom.seo_title'), 'seo_description' => trans('validation.custom.seo_description'), 'title' => trans('validation.attributes.title'), 'tips' => trans('validation.custom.tips'), 'tips_title' => trans('validation.custom.tips_title'), 'tips_picto' => trans('validation.custom.tips_picto'), 'tips_picto_alt' => trans('validation.custom.attribute_alt'), 'tips_picto_title' => trans('validation.custom.attribute_title'), 'picture' => trans('validation.attributes.image'), 'picture_alt' => trans('validation.custom.attribute_alt'), 'picture_title' => trans('validation.custom.attribute_title'), 'ingredients_list' => trans('validation.custom.ingredients_list'), 'ingredients_list.*.label_unit' => trans('validation.custom.ingredients_list'), 'ingredients_list.*.label_value' => trans('validation.custom.ingredients_list'), 'ingredients_list.*.is_proportionnal' => trans('validation.custom.ingredients_list'), 'preparation' => trans('validation.custom.preparation'), 'preparation_title' => trans('validation.custom.preparation_title'), 'advice' => trans('validation.custom.advice'), 'advice_title' => trans('validation.custom.advice_title'), 'advice_picto' => trans('validation.custom.advice_picto'), 'advice_picto_alt' => trans('validation.custom.attribute_alt'), 'advice_picto_title' => trans('validation.custom.attribute_title'), 'video_id' => trans('validation.custom.video_id'), 'consumption_moments' => trans_choice('models.classes.consumption_moment', 2), 'consumption_moments.*' => trans_choice('models.classes.consumption_moment', 1), 'products' => Str::plural(trans('models.classes.product')), 'preparation_time' => trans('validation.custom.preparation_time'), 'cooking_time' => trans('validation.custom.cooking_time'), 'nb_guests' => trans('validation.custom.nb_guests'), 'difficulty' => trans('validation.custom.difficulty'), 'highlight' => trans('validation.custom.highlight'), 'published' => trans('validation.custom.published'), ]; } }