Los controladores nos permiten agrupar la lógica de las peticiones http relacionadas con la finalidad de organizar de mejor manera nuestro código. Los controladores interactuan constantemente con las vistas y el modelo.
Un controlador es un archivo PHP, que debe ser creado dentro de la carpeta App/Http/Controllers
Crear un Controlador
Para crear un controlador abrimos la terminal y escribimos el siguiente comando:
php artisan make:controller NombreController
En donde Nombre es el nombre del controlador. Por convención se escribe el nombre del controlador con su primera letra en mayúscula seguido de la palabra Controller.
El archivo creado tiene la siguiente estructura:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class NombreController extends Controller
{
//
}
En donde namespace nos indica la ruta del archivo php del controlador que acabamos de crear.
Dentro de la clase NombreController escribiremos los métodos que se van a encargar de administrar nuestras rutas.
Para asignar un controlador a una ruta especificamos el controlador que vamos a utilizar, para ello agregamos lo siguiente en el archivo de rutas web.php
use App\Http\Controllers\NombreController;
Route::get('/', function () {
return view('welcome');
});
Modificamos de la siguiente manera:
Route::get('/', NombreController::class);
Lo que teníamos dentro de la función anónima lo llevamos al archivo del controlador y lo escribimos dentro de un método:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class NombreController extends Controller
{
public function __invoke(){
return view('welcome');
}
}
El método invoke lo utilizamos cuando requerimos que el controlador administre una sola ruta. También podemos hacer que un controlador gestione varias rutas, por ejemplo creamos un controlador llamado CursoController y luego en el archivo web.php definimos de la siguiente manera:
Route::get('cursos', [CursoController::class,'index']);
Route::get('cursos/create',[CursoController::class,'create']);
Route::get('cursos/{curso}', [CursoController::class,'show']);
En el archivo CursoController.php hacemos lo siguiente:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class CursoController extends Controller
{
public function index(){
return 'Página principal de los Cursos';
}
public function create(){
return 'Página para crear cursos';
}
public function show($curso){
return "Página específica de un $curso";
}
}