0.1: replace Request with FormRequest in all controllers

This commit is contained in:
parsa aghaei 2026-06-23 18:04:48 +03:30
parent ffafcf447b
commit f3568ab277
15 changed files with 277 additions and 107 deletions

View File

@ -3,11 +3,12 @@
namespace App\Http\Controllers\Blog;
use App\Http\Controllers\Controller;
use App\Http\Requests\Blog\StoreCategoryRequest;
use App\Http\Requests\Blog\UpdateCategoryRequest;
use App\Http\Resources\CategoryResource;
use App\Http\Resources\PostResource;
use App\Models\Blog\Category;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class CategoryController extends Controller
{
@ -114,43 +115,18 @@ public function getCategoryWithPosts(Request $request, $slug)
// ذخیره یک دسته‌بندی جدید
public function store(Request $request)
public function store(StoreCategoryRequest $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255|unique:categories,name',
'slug' => 'required|string|unique:categories,slug',
'description' => 'required|string',
'short_description' => 'nullable|string|max:500',
'image' => 'nullable|url',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$category = Category::create($validator->validated());
$category = Category::create($request->validated());
return new CategoryResource($category);
}
// به‌روزرسانی یک دسته‌بندی خاص
public function update(Request $request, $id)
public function update(UpdateCategoryRequest $request, $id)
{
$category = Category::findOrFail($id);
$validator = Validator::make($request->all(), [
'name' => 'sometimes|required|string|max:255|unique:categories,name,' . $category->id,
'slug' => 'sometimes|required|string|unique:categories,slug,' . $category->id,
'description' => 'sometimes|required|string',
'short_description' => 'nullable|string|max:500',
'image' => 'nullable|url',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$category->update($validator->validated());
$category->update($request->validated());
return new CategoryResource($category);
}

View File

@ -3,10 +3,11 @@
namespace App\Http\Controllers\Blog;
use App\Http\Controllers\Controller;
use App\Http\Requests\Blog\StorePostRequest;
use App\Http\Requests\Blog\UpdatePostRequest;
use App\Http\Resources\PostResource;
use App\Models\Blog\Post;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class PostController extends Controller
{
@ -51,28 +52,9 @@ public function show($slug)
}
// ذخیره یک پست جدید
public function store(Request $request)
public function store(StorePostRequest $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|string|max:255',
'body' => 'required|string',
'excerpt' => 'nullable|string|max:500',
'slug' => 'required|string|unique:posts,slug',
'author_id' => 'required|exists:users,id',
'category_id' => 'required|exists:categories,id',
'featured_image' => 'nullable|url',
'views' => 'nullable|integer',
'likes' => 'nullable|integer',
'published_at' => 'nullable|date',
'tags' => 'nullable|array',
'tags.*' => 'exists:tags,id',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$post = Post::create($validator->validated());
$post = Post::create($request->validated());
if ($request->has('tags')) {
$post->tags()->attach($request->tags);
@ -82,30 +64,10 @@ public function store(Request $request)
}
// به‌روزرسانی یک پست خاص
public function update(Request $request, $id)
public function update(UpdatePostRequest $request, $id)
{
$post = Post::findOrFail($id);
$validator = Validator::make($request->all(), [
'title' => 'sometimes|required|string|max:255',
'body' => 'sometimes|required|string',
'excerpt' => 'nullable|string|max:500',
'slug' => 'sometimes|required|string|unique:posts,slug,' . $post->id,
'author_id' => 'sometimes|required|exists:users,id',
'category_id' => 'sometimes|required|exists:categories,id',
'featured_image' => 'nullable|url',
'views' => 'nullable|integer',
'likes' => 'nullable|integer',
'published_at' => 'nullable|date',
'tags' => 'nullable|array',
'tags.*' => 'exists:tags,id',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$post->update($validator->validated());
$post->update($request->validated());
if ($request->has('tags')) {
$post->tags()->sync($request->tags);

View File

@ -3,10 +3,11 @@
namespace App\Http\Controllers\Blog;
use App\Http\Controllers\Controller;
use App\Http\Requests\Blog\StoreTagRequest;
use App\Http\Requests\Blog\UpdateTagRequest;
use App\Http\Resources\TagResource;
use App\Models\Blog\Tag;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class TagController extends Controller
{
@ -25,37 +26,18 @@ public function show($id)
}
// ذخیره یک تگ جدید
public function store(Request $request)
public function store(StoreTagRequest $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255|unique:tags,name',
'slug' => 'required|string|unique:tags,slug',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$tag = Tag::create($validator->validated());
$tag = Tag::create($request->validated());
return new TagResource($tag);
}
// به‌روزرسانی یک تگ خاص
public function update(Request $request, $id)
public function update(UpdateTagRequest $request, $id)
{
$tag = Tag::findOrFail($id);
$validator = Validator::make($request->all(), [
'name' => 'sometimes|required|string|max:255|unique:tags,name,' . $tag->id,
'slug' => 'sometimes|required|string|unique:tags,slug,' . $tag->id,
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$tag->update($validator->validated());
$tag->update($request->validated());
return new TagResource($tag);
}

View File

@ -2,9 +2,10 @@
namespace App\Http\Controllers\Website;
use Illuminate\Http\Request;
use App\Models\Website\AboutMe;
use App\Http\Controllers\Controller;
use App\Http\Requests\Website\StoreAboutMeRequest;
use App\Http\Requests\Website\UpdateAboutMeRequest;
use App\Models\Website\AboutMe;
class AboutMeController extends Controller
{
@ -20,16 +21,16 @@ public function show($id)
return response()->json($aboutMe);
}
public function store(Request $request)
public function store(StoreAboutMeRequest $request)
{
$aboutMe = AboutMe::create($request->all());
$aboutMe = AboutMe::create($request->validated());
return response()->json($aboutMe, 201);
}
public function update(Request $request, $id)
public function update(UpdateAboutMeRequest $request, $id)
{
$aboutMe = AboutMe::findOrFail($id);
$aboutMe->update($request->all());
$aboutMe->update($request->validated());
return response()->json($aboutMe);
}

View File

@ -3,7 +3,8 @@
namespace App\Http\Controllers\website;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\Website\StoreProjectRequest;
use App\Http\Requests\Website\UpdateProjectRequest;
use App\Models\Website\Project;
use App\Models\Website\ProjectCategory;
@ -53,7 +54,7 @@ public function index($locale): \Illuminate\Http\JsonResponse
}
public function store(Request $request)
public function store(StoreProjectRequest $request)
{
$project = Project::create($request->only(['category_id', 'image1', 'image2']));
@ -92,7 +93,7 @@ public function show($id)
}
public function update(Request $request, $id)
public function update(UpdateProjectRequest $request, $id)
{
$project = Project::findOrFail($id);
$project->update($request->only(['category_id', 'image1', 'image2']));

View File

@ -0,0 +1,24 @@
<?php
namespace App\Http\Requests\Blog;
use Illuminate\Foundation\Http\FormRequest;
class StoreCategoryRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'name' => 'required|string|max:255|unique:categories,name',
'slug' => 'required|string|unique:categories,slug',
'description' => 'required|string',
'short_description' => 'nullable|string|max:500',
'image' => 'nullable|url',
];
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace App\Http\Requests\Blog;
use Illuminate\Foundation\Http\FormRequest;
class StorePostRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'title' => 'required|string|max:255',
'body' => 'required|string',
'excerpt' => 'nullable|string|max:500',
'slug' => 'required|string|unique:posts,slug',
'author_id' => 'required|exists:users,id',
'category_id' => 'required|exists:categories,id',
'featured_image' => 'nullable|url',
'views' => 'nullable|integer',
'likes' => 'nullable|integer',
'published_at' => 'nullable|date',
'tags' => 'nullable|array',
'tags.*' => 'exists:tags,id',
];
}
}

View File

@ -0,0 +1,21 @@
<?php
namespace App\Http\Requests\Blog;
use Illuminate\Foundation\Http\FormRequest;
class StoreTagRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'name' => 'required|string|max:255|unique:tags,name',
'slug' => 'required|string|unique:tags,slug',
];
}
}

View File

@ -0,0 +1,26 @@
<?php
namespace App\Http\Requests\Blog;
use Illuminate\Foundation\Http\FormRequest;
class UpdateCategoryRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
$categoryId = $this->route('category');
return [
'name' => 'sometimes|required|string|max:255|unique:categories,name,' . $categoryId,
'slug' => 'sometimes|required|string|unique:categories,slug,' . $categoryId,
'description' => 'sometimes|required|string',
'short_description' => 'nullable|string|max:500',
'image' => 'nullable|url',
];
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace App\Http\Requests\Blog;
use Illuminate\Foundation\Http\FormRequest;
class UpdatePostRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'title' => 'sometimes|required|string|max:255',
'body' => 'sometimes|required|string',
'excerpt' => 'nullable|string|max:500',
'slug' => 'sometimes|required|string|unique:posts,slug,' . $this->route('post'),
'author_id' => 'sometimes|required|exists:users,id',
'category_id' => 'sometimes|required|exists:categories,id',
'featured_image' => 'nullable|url',
'views' => 'nullable|integer',
'likes' => 'nullable|integer',
'published_at' => 'nullable|date',
'tags' => 'nullable|array',
'tags.*' => 'exists:tags,id',
];
}
}

View File

@ -0,0 +1,23 @@
<?php
namespace App\Http\Requests\Blog;
use Illuminate\Foundation\Http\FormRequest;
class UpdateTagRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
$tagId = $this->route('tag');
return [
'name' => 'sometimes|required|string|max:255|unique:tags,name,' . $tagId,
'slug' => 'sometimes|required|string|unique:tags,slug,' . $tagId,
];
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Http\Requests\Website;
use Illuminate\Foundation\Http\FormRequest;
class StoreAboutMeRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'image' => 'required|string|max:255',
];
}
}

View File

@ -0,0 +1,26 @@
<?php
namespace App\Http\Requests\Website;
use Illuminate\Foundation\Http\FormRequest;
class StoreProjectRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'category_id' => 'required|exists:website_project_categories,id',
'image1' => 'required|string|max:255',
'image2' => 'required|string|max:255',
'title_fa' => 'required|string|max:255',
'title_en' => 'required|string|max:255',
'description_fa' => 'required|string',
'description_en' => 'required|string',
];
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Http\Requests\Website;
use Illuminate\Foundation\Http\FormRequest;
class UpdateAboutMeRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'image' => 'sometimes|required|string|max:255',
];
}
}

View File

@ -0,0 +1,26 @@
<?php
namespace App\Http\Requests\Website;
use Illuminate\Foundation\Http\FormRequest;
class UpdateProjectRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'category_id' => 'sometimes|required|exists:website_project_categories,id',
'image1' => 'sometimes|required|string|max:255',
'image2' => 'sometimes|required|string|max:255',
'title_fa' => 'sometimes|required|string|max:255',
'title_en' => 'sometimes|required|string|max:255',
'description_fa' => 'sometimes|required|string',
'description_en' => 'sometimes|required|string',
];
}
}