Link Search Menu Expand Document

5.6. Primeros pasos con Laravel: Hola mundo

En esta sección vamos a crear nuestra primera aplicación funcional con Laravel: el tradicional “Hola mundo”.

Vale, ya sé que no es gran cosa, pero nos servirá para aprender la dinámica de trabajo con Laravel y para construir un esqueleto de aplicación sobre la que montar algo más grande más adelante.

Vamos a crear esta aplicación paso a paso. Tal vez te parezca un poco exagerado, pero recuerda que la curva de aprendizaje de Laravel es muy empinada al principio y se suaviza mucho después. Es decir: los primeros pasos son los que más cuestan.

Paso 1. Crea una clave segura

Lo primero que debes hacer en cualquier aplicación Laravel es crear una clave segura para la aplicación.

Esto crea una clave de encriptación aleatoria que se guarda en el archivo de configuración de la aplicación (.env). Laravel utilizará esa clave para cifrar ciertas cosas (por ejemplo, las contraseñas de usuario).

Por ahora, no te preocupes de para qué sirve exactamente esta clave. Lo único importante es que Laravel no funcionará sin ella.

Así pues, lo primero que hay que hacer con cualquier aplicación Laravel nueva es ejecutar este comando:

php artisan key:generate

Paso 2. Prueba el enrutador

Vamos a empezar probando algo sencillo: capturar una ruta.

Edita el archivo /routes/web.php y añade esto:

Route::get('/hola', function() {
   return "Hola, mundo";
});

Esto significa que, cuando escribas la ruta “hola” en la barra de direcciones del navegador, se ejecutará esta función anónima (también denominadas closure) y, como resultado, se verá el texto “Hola, mundo” en la ventana del navegador.

Pruébalo en el navegador, escribiendo la dirección: http://mi-servidor/index.php/hola

Paso 3. Crea una ruta hacia un controlador

Los closures o funciones sin nombre raramente se usan en el enrutador.

Lo que suele hacer en enrutador es redirigir la ejecución hacia un controlador. Es justo lo que vamos ahora.

Edita el enrutador (/routes/web.php) y sustituye la ruta anterior por esto:

Route::get('/hola', 'HolaController@index');

Esto indica al enrutador que, al recibir la ruta “hola”, se debe ejecutar el método index() del controlador HolaController.

Pero el controlador HolaController no existe, así que vamos a crearlo con este comando de Artisan::

$ php artisan make:controller HolaController

Por último, edita el controlador (/app/Http/Controllers/HolaController.php) y añádele el método index():

public function index() {
   return "Hola, mundo";
}

Comprueba que funciona en el navegador: http://mi-servidor/index.php/hola

NOTA IMPORTANTE: a partir de Laravel 8, para que este enrutamiento funcione es necesario descomentar modificar el archivo /app/Providers/RouteServiceProvider.php de este modo:

 $this->routes(function () {
            Route::prefix('api')
                ->middleware('api')
                ->namespace('App\Http\Controllers')  <------------ AÑADE ESTO
                ->group(base_path('routes/api.php'));

            Route::middleware('web')
                ->namespace($this->namespace)
                ->namespace('App\Http\Controllers') <------------- AÑADE ESTO
                ->group(base_path('routes/web.php'));
        });

Paso 4. Cargar una vista desde el controlador

¿Recuerdas que, en la arquitectura MVC, el controlador no debería producir ninguna salida HTML?

Pues bien, nuestro controlador la está produciendo.

Vamos a modificarlo para que el método index() del controlador no genere el “Hola, mundo”, sino que invoque a una vista que se encargue de ello.

Además, vamos a inyectar en la URL una variable con el nombre del usuario para mostrar cómo se capturan esos valores y cómo se pasan a las vistas en Laravel.

Comenzamos modificando el enrutador (/routes/web.php). Observa cómo se usan las llaves { y } para indicar la presencia de una variable en la URL:

Route::get('/hola/{nombre}', 'HolaController@show');

Ahora creamos un método show() en el controlador (/app/Http/Controllers/HolaController.php):

public function show($nombre) {
   $data['nombre'] = $nombre;
   return view('hola', $data);
}

Como ves, estamos invocando una vista llamada hola y le estamos pasando un array con los datos necesarios (el nombre del usuario, en este caso). Esa vista debe crearse en /resources/views/hola.blade.php y puede tener este aspecto:

<body>
   Saludos, {{$nombre}}.
   ¿Le apetece una partidita de ajedrez?
</body>

Puedes probar esta nueva ruta cargando en el navegador una ruta como: http://mi-servidor/index.php/hola/ProfesorFalken

La respuesta debería ser esta:

Saludos, ProfesorFalken. ¿Le apetece una partidita de ajedrez?

Recuerda que, desde Laravel 8, el funcionamiento del enrutador ha cambiado. Para conservar compatibilidad hacia atrás, hay que abrir el archivo /app/Providers/RouteServiceProvider.php y descomentar esta línea:

// protected $namespace = 'App\Http\Controllers';

Hay otras soluciones para esto que se describen aquí.