mgsmus Abi hepsini okudum söylemeyede çekiniyorum ama acemi olduğum için Dependency Injection ve Repository konularını anlamakta çok güçlük çekiyorum. Biraz araştırmayı denedim ama anlayamadım. Sanırım repository servis oluşturma konusu ağırlıklı sorgu işlemlerinde kullanılıyor. https://laravel.gen.tr/d/5835-crud-islemleri bu linkte yazanların bir kısmını yapıyorum aslında.
Controller oluştururken -r komutu ile index, edit, update vb metodlarını kullanıyorum + model binding ile.
Controller içerisindeki işlemler içinde Store ve Update adında iki adet request oluşturup içerisinde çalışıyorum. Buraya kadar tamam gibi. Ama örnek verecek olursak şöyle bir kod paylaşmak istiyorum:
public function store(StorePostCategoryRequest $request, PostCategory $postCategory)
{
$validated = $request->validated();
if (!$validated) {
return redirect()->back()->with('error', 'Formda belirtilen hataları düzelterek tekrar deneyin');
}
// PostCategory Inputs
$postCategory->name = $request->input('name');
$postCategory->description = $request->input('description');
$postCategory->status = $request->input('status');
// Upload Thumbnail
if ($request->filled('thumbnail') || $request->hasFile('thumbnail')) {
$imageName = Str::uuid() . '.' . $request->file('thumbnail')->getClientOriginalExtension();
$thumbnail = $request->file('thumbnail');
$baseName = '/assets/blog/categories/';
$relativePath = $baseName . date('Y') . '/' . date('m');
$store = $thumbnail->storeAs($relativePath, $imageName, 'public');
if (!$store) {
return redirect()->back()->with('error', 'Blog resmi kaydedilirken bir hata oluştu');
}
$path = Storage::url($store);
$postCategory->thumbnail = $path;
}
// Parent
if ($request->filled('category')) {
$postCategory->parent_id = $request->input('category');
} else {
$postCategory->parent_id = null;
}
// Save Post Category
if (!$postCategory->save()) {
return redirect()->back()->with('error', 'Gönderi kategorisi yayımlanırken bir hata oluştu');
}
// PostCategory Detail Inputs
$postCategoryDetail = new PostCategoryDetail();
$postCategoryDetail->slug = $request->filled('slug') ? Str::slug($request->input('slug')) : Str::slug($request->input('name'));
$postCategoryDetail->seo_title = $request->input('seo_title');
$postCategoryDetail->seo_description = $request->input('seo_description');
$postCategoryDetail->index = $request->input('index');
if (!$postCategory->detail()->save($postCategoryDetail)) {
return redirect()->back()->with('error', 'Gönderi kategorisi detayları kaydedilirken bir hata oluştu');
}
return redirect()->route('post-categories.edit', $postCategory->id)->with('success', 'Gönderi kategorisi başarıyla yayımlandı');
}
Yada daha net gösterebilmek için neredeyse her controllerimin içerisinde şu metodlar var bunların her dosyada görmekten kalabalık yapmasından aşırı rahatsız olmaya başladım.
public function deleteSelected(Request $request): \Illuminate\Http\JsonResponse
{
$selected = $request->input('selected', []);
if (empty($selected)) {
return response()->json(['error' => 'Gönderi seçimi yapılmadı.'], 400);
}
foreach ($selected as $id) {
$post = Post::where('id', $id)->first();
if ($post) {
$post->status = 0;
$post->save();
$post->delete();
}
}
$request->session()->flash('success', 'Gönderiler başarılı bir şekilde silindi');
return response()->json(['success' => true]);
}
Burası benim PostCategoryController dosyam. Aynı şekilde PostController, PostTagController, PostCommentController dosyalarım var ve hepsinin store metodu neredeyse böyle birbirine çok yakın. Birde bunların aynı zamanda benzer tipte update metodları var. Aklıma bir özellik geldiğinde ne zaman bir controller açsam hep benzer şeyleri yazıp duruyorum. Buradaki karmaşa için ne kullanacağım nasıl ilerlemeliyim tam anlayamıyorum acaba müsait olduğun bir zaman bana yardımcı olabilir misin?