get('parent_id'), [0, '0', '', 'null', 'NULL'], true)) { $this->merge(['parent_id' => null]); } } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { if ($this->isMethod('get')) { return []; } return [ 'name' => 'required|array', 'name.*' => 'required|string', 'image' => 'nullable', 'parent_id' => 'nullable|integer|exists:categories,id', 'popular' => 'nullable', 'brands' => 'nullable|array', 'position' => 'nullable|numeric' ]; } public function getName(): array { return $this->get('name'); } public function getSlug(): string { return Str::slug($this->get('name')['uz']); } public function getImage(Category $category): ?string { if ($this->hasFile('image')) { Storage::disk('local')->delete($category->image); return $this->storeCategoryImage($this->file('image')); } return $category->image; } private function storeCategoryImage(UploadedFile $file): string { $relativeDirectory = 'uploads/categories'; $directory = public_path($relativeDirectory); if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) { throw new RuntimeException("Category upload directory could not be created: {$directory}"); } if (!is_writable($directory)) { throw new RuntimeException("Category upload directory is not writable: {$directory}"); } $fileName = $file->hashName(); $file->move($directory, $fileName); return "{$relativeDirectory}/{$fileName}"; } public function getFilterPower() { if ($this->get('is_filter_power') == 'true') { return true; } return false; } public function getPublished() { if ($this->get('published') == 'true') { return true; } return false; } public function getCredit() { if ($this->get('credit') == 'true') { return true; } return false; } public function getParentId() { if ((int) $this->get('parent_id') > 0) { return (int) $this->get('parent_id'); } return null; } public function getPosition(): int { return (int) $this->get('position'); } public function getPopular(): bool { if ($this->get('popular') == 'false') { return false; } return true; } }