|string> */ public function pictureRules( string $name = 'picture', ?int $minWidth = null, ?int $minHeight = null, ?int $maxWidth = null, ?int $maxHeight = null, bool $nullable = false, ?int $size = null, ?string $requiredWith = null, ?string $requiredWithout = null, ): array { $dimensions = [ 'minWidth' => $minWidth ?? $this->minWidth, 'minHeight' => $minHeight ?? $this->minHeight, 'maxWidth' => $maxWidth ?? $this->maxWidth, 'maxHeight' => $maxHeight ?? $this->maxHeight ]; return [ $name => [ !$nullable ? 'required' : 'nullable', (strlen($requiredWith)) ? 'required_with:' . $requiredWith : '', (strlen($requiredWithout)) ? 'required_without:' . $requiredWithout : '', ($size) ? 'max:' . $size : '', function (string $attribute, $value, callable $fail) use ($dimensions) { ToolboxHelper::validatePicture($attribute, $value, $fail, $dimensions); } ] ]; } /** * Images rules. * * @param string $name * @param integer|null $minWidth * @param integer|null $minHeight * @param integer|null $maxWidth * @param integer|null $maxHeight * @param integer $limitMin * @param integer $limitMax * @param boolean $nullable * @return array|string> */ public function picturesRules( string $name = 'pictures', ?int $minWidth = null, ?int $minHeight = null, ?int $maxWidth = null, ?int $maxHeight = null, int $limitMin = 1, int $limitMax = 5, bool $nullable = false ): array { $sizes = [ 'minWidth' => $minWidth ?? $this->minWidth, 'minHeight' => $minHeight ?? $this->minHeight, 'maxWidth' => $maxWidth ?? $this->maxWidth, 'maxHeight' => $maxHeight ?? $this->maxHeight, ]; return [ $name => [!$nullable ? 'required' : 'nullable', 'array', "between:{$limitMin},{$limitMax}"], "{$name}Validate" => "required_with:{$name}|array", "{$name}Validate.*" => [ 'required', function (string $attribute, $value, callable $fail) use ($sizes) { ToolboxHelper::validatePicture($attribute, $value, $fail, $sizes); } ] ]; } /** * Merges products pictures fields with request data. * * @param string $name * @return void */ protected function mergePicture(string $name = 'picture'): void { $picturePath = $this->{$name}; if (is_string($picturePath)) { $this->merge(["{$name}Validate" => []]); // ! Empty picture. if ($picturePath === 'false') { // * Empty picture and exit $this->merge([$name => []]); return; } $decodedPath = \urldecode($picturePath); $this->merge([ "{$name}Validate" => array_merge( $this->{"{$name}Validate"}, [\public_path(ltrim($decodedPath, '/'))] ) ]); $changedPicture = ltrim($decodedPath, '/'); $this->merge([ $name => $changedPicture ]); } //end if } /** * Merges products pictures fields with request data. * * @param string $name * @return void */ protected function mergePictures(string $name = 'pictures'): void { $pictures = $this->{$name}; if (is_array($pictures)) { $this->merge(["{$name}Validate" => []]); foreach ($pictures as $key => $picturePath) { // ! Empty picture. if ($picturePath === 'false') { // * Empty picture and exit $this->merge([$name => []]); return; } $decodedPath = \urldecode($picturePath); $this->merge([ "{$name}Validate" => array_merge( $this->{"{$name}Validate"}, [\public_path(ltrim($decodedPath, '/'))] ) ]); $changedPicture = $this->{$name}; $changedPicture[$key] = ltrim($decodedPath, '/'); $this->merge([ $name => $changedPicture ]); } } //end if } }