Controllers
Los controladores organizan la logica de manejo de peticiones HTTP en clases dedicadas en lugar de definir toda la logica en los archivos de rutas. Agrupan peticiones relacionadas y mantienen el codigo organizado.
Tipos de controladores
// Controlador de recurso (CRUD completo)
php artisan make:controller PostController --resource
class PostController extends Controller
{
public function index(): View
{
$posts = Post::published()->latest()->paginate(15);
return view('posts.index', compact('posts'));
}
public function store(StorePostRequest $request): RedirectResponse
{
$post = Post::create($request->validated());
return redirect()->route('posts.show', $post)
->with('success', 'Post creado correctamente.');
}
public function show(Post $post): View
{
return view('posts.show', compact('post'));
}
}
Controlador invocable (single action)
class PublishPostController extends Controller
{
public function __invoke(Post $post): RedirectResponse
{
$post->update(['published' => true, 'published_at' => now()]);
return back()->with('success', 'Post publicado.');
}
}
// En routes/web.php
Route::post('/posts/{post}/publish', PublishPostController::class);
Se recomienda mantener los controladores delgados, delegando la logica de negocio a services o actions. Un controlador no deberia tener mas de 5-7 metodos.