Controller'lar
Controller'lar HTTP isteklerini işleyen sınıflardır. İlgili request handling logic'ini gruplamak için kullanılır.
Controller Oluşturma
# Temel controller
php artisan make:controller UserController
# Resource controller (CRUD metodları ile)
php artisan make:controller PostController --resource
# API Resource controller
php artisan make:controller Api/PostController --api
# Model binding ile
php artisan make:controller PostController --resource --model=Post
# Invokable controller (tek metod)
php artisan make:controller ShowProfile --invokable
Temel Controller
validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8|confirmed',
]);
$user = User::create([
'name' => $validated['name'],
'email' => $validated['email'],
'password' => bcrypt($validated['password']),
]);
return redirect()
->route('users.show', $user)
->with('success', 'Kullanıcı oluşturuldu!');
}
}
Resource Controller
paginate(10);
return view('posts.index', compact('posts'));
}
/**
* GET /posts/create - Oluşturma formu
*/
public function create()
{
return view('posts.create');
}
/**
* POST /posts - Kaydet
*/
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|max:255',
'content' => 'required',
]);
$post = auth()->user()->posts()->create($validated);
return redirect()->route('posts.show', $post);
}
/**
* GET /posts/{post} - Tek kayıt
*/
public function show(Post $post)
{
return view('posts.show', compact('post'));
}
/**
* GET /posts/{post}/edit - Düzenleme formu
*/
public function edit(Post $post)
{
return view('posts.edit', compact('post'));
}
/**
* PUT /posts/{post} - Güncelle
*/
public function update(Request $request, Post $post)
{
$validated = $request->validate([
'title' => 'required|max:255',
'content' => 'required',
]);
$post->update($validated);
return redirect()->route('posts.show', $post);
}
/**
* DELETE /posts/{post} - Sil
*/
public function destroy(Post $post)
{
$post->delete();
return redirect()->route('posts.index');
}
}
Dependency Injection
use App\Services\PaymentService;
use App\Repositories\UserRepository;
class PaymentController extends Controller
{
// Constructor injection
public function __construct(
private PaymentService $paymentService,
private UserRepository $userRepository
) {}
public function process(Request $request)
{
$user = $this->userRepository->find($request->user_id);
$result = $this->paymentService->charge($user, $request->amount);
return response()->json($result);
}
// Method injection
public function report(Request $request, ReportService $reportService)
{
return $reportService->generate($request->all());
}
}
Invokable Controller
Tek bir işlem yapan controller'lar için:
Response Türleri
// View döndürme
return view('users.index', ['users' => $users]);
// Redirect
return redirect('/dashboard');
return redirect()->route('users.index');
return redirect()->back();
return redirect()->back()->withInput();
// JSON
return response()->json(['status' => 'success']);
return response()->json($data, 201);
// Download
return response()->download($pathToFile);
return response()->download($path, $name, $headers);
// Custom response
return response('Hello World', 200)
->header('Content-Type', 'text/plain');
// Flash message ile redirect
return redirect()
->route('posts.index')
->with('success', 'Post oluşturuldu!')
->with('post_id', $post->id);
Önemli Noktalar
- Controller'lar HTTP isteklerini işler
- php artisan make:controller ile oluşturulur
- Resource controller CRUD operasyonları için hazır metodlar içerir
- Dependency injection ile servisler enjekte edilir
- Single responsibility prensibi önemli