Rutas en laravel

Rutas en laravel

 

Enrutamiento

 

Las rutas más básicas en laravel aceptan una URL y un closure,  lo que te permitirá colocar un método simple, en el cual podrás colocar el comportamiento sin tener que agregar un controlador por separado.

 

use Illuminate\Support\Facades\Route;

 

Route::get('/saludo', function () {

    return 'Hola Mundo';

});

Todas las rutas se encuentran en el directorio de routes. Estos archivos son cargados automáticamente por el provider App\Providers\Route Service Provider . El archivo web.php que se encuentra en la carpeta de routes se definen las rutas que se usará para la interfaz web, es decir para el sitio público. A estas rutas se les asigna el middleware web, el cual proporciona características como son el estado de la sesión y la protección CSRF. Por otro lado las rutas que se encuentran en routes/api.php no tienen estado y se le asigna el middleware api.

 

Para la mayoría de las aplicaciones, comenzaremos definiendo las rutas en el archivo web.php, al colocar las rutas en dicho archivo, podrás inmediatamente acceder desde cualquier navegador a dicha URL. Por ejemplo si se define la ruta user, podras acceder al recurso accediendo a https://ejemplo.com/user en el navegador

 

use App\Http\Controllers\UserController;

 

Route::get('/user', [UserController::class, 'index']);


 

Las rutas definidas en el archivo api.php se aplica automáticamente un prefijo URI. Dicho prefijo se podrá ser modificado al igual con otras opciones dentro de la clase  Route Service Provider

 

Métodos disponibles

Las rutas te permite registrar rutas que respondan a cualquier tipo de verbo HTTP

 

Route::get($uri, $callback);

Route::post($uri, $callback);

Route::put($uri, $callback);

Route::patch($uri, $callback);

Route::delete($uri, $callback);

Route::options($uri, $callback);

En ocasiones es posible que tengas que registrar alguna ruta en la responda a varios verbos HTTP al mismo tiempo. Esto lo puedes hacer utilizando el método match. O incluso puedes registrar una ruta que responda a todos los verbos HTTP utilizando el método any


 

Route::match(['get', 'post'], '/', function () {

    //

});

 

Route::any('/', function () {

    //

});

 

Ten en cuenta que si usas any, match y redirect, estas deberás de definirlas después de cualquier otra (get, post, put, patch, delete y options)


 

Inyección de dependencias en el closure

En el callback podrás inyectar dependencias. por ejemplo puedes fácilmente inyectar  la clase request para que la solicitud HTTP actual se inyectó automáticamente en la devolución de llamada de su ruta

 

use Illuminate\Http\Request;

 

Route::get('/users', function (Request $request) {

    // ...

});


 

protección CSRF

Cualquier formulario HTML que apunte a los verbos POST, PUT, PATCH o DELETE, deberán de incluir un campo oculto de token CSRF. De lo contrario la solicitud o el formulario será rechazado.

 

<form method="POST" action="/profile">

    @csrf

    ...

</form>

 

Redirigir las rutas

Existe un método para que puedas redirigir una URL a otra distinta, con el método redirect. Este método es un atajo conveniente para que no tengas que definir una ruta completa o un controlador para realizar dicha redirección

 

Route::redirect('/here', '/there');

Este método de forma predeterminada devolverá el código de estado 302. Puede ser personalizado pasándolo como un tercer parámetro opcional 


 

Route::redirect('/here', '/there', 301);

o también puedes utilizar el método permanent Redirect para devolver un 301 como código de respuesta

 

Route::permanentRedirect('/here', '/there');

Vistas en rutas

 

Si la ruta solo requiere devolver una vista, puedes usar el método view.  Al igual que el método redirect, proporciona un atajo simple para que no tengas que crear una ruta completa o controlador. El método view acepta una URL como primer argumento y un nombre de vista como segundo argumento. Además puedes pasarle datos a la vista como un tercer argumento a través de un array

 

Route::view('/welcome', 'welcome');

 

Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

Parámetros de ruta

En ocasiones vas a requerir pasar parámetros a la URI. Por ejemplo es posible que requieras capturar el ID de un usuario a través de la URL. Para esto podrás definirlo de la siguiente manera

 

Route::get('/user/{id}', function ($id) {

    return 'User '.$id;

});

Puedes definir tantos parámetros como la ruta o tu aplicación requiera

 

Route::get('/posts/{post}/comments/{comment}', function ($postId, $commentId) {

    //

});

 

Los parámetros de ruta siempre deben ir encerrados entre {} y deben de ser caracteres alfabéticos. Los guiones bajos también son aceptables dentro de los nombres de los parámetros de la ruta. Los parámetros de ruta se inyectarán en la devolución de la función o el controlador de la ruta en dicho orden, los nombres de los argumentos de la función o del controlador para ser manipulados no importan, pueden ser distintos a los que colocaste en la URI.

 

Inyección de dependencias y parámetros

Si la ruta requiere dependencias, estas pueden ser inyectadas automáticamente en la devolución del callback, los parámetros de la ruta van después de las dependencias

 

use Illuminate\Http\Request;

 

Route::get('/user/{id}', function (Request $request, $id) {

    return 'User '.$id;

});

Parámetros opcionales

 

Para colocar parámetros opcionales, debes de colocar uno ? Después del nombre del parámetro, asegúrate de colocarle un valor por defecto a dicha variable desde la función o el parámetro que recibe dicha variable.

 

Route::get('/user/{name?}', function ($name = null) {

    return $name;

});

 

Route::get('/user/{name?}', function ($name = 'John') {

    return $name;

});

 

Restricciones con expresiones regulares

Puedes restringir el tipo de valor/formato de los parámetros de la ruta utilizando el método where de la instancia de la ruta. El método donde se acepta el nombre del parámetro y una expresión regular que definirá el cómo debería de ser el formato de dicho parámetro.

Route::get('/user/{name}', function ($name) {

    //

})->where('name', '[A-Za-z]+');

 

Route::get('/user/{id}', function ($id) {

    //

})->where('id', '[0-9]+');

 

Route::get('/user/{id}/{name}', function ($id, $name) {

    //

})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);


 

Para una mejor comodidad, existen algunos patrones o expresiones regulares de uso común, y para eso existen funciones auxiliares o helpers que te permiten agregar rápidamente dicha validación de patrón en dicha ruta.

 

Route::get('/user/{id}/{name}', function ($id, $name) {

    //

})->whereNumber('id')->whereAlpha('name');

 

Route::get('/user/{name}', function ($name) {

    //

})->whereAlphaNumeric('name');

 

Route::get('/user/{id}', function ($id) {

    //

})->whereUuid('id');

 

En caso de que la variable no contenga dicho patrón pasado en la expresión regular, se devolverá una respuesta con HTTP 404


 

Restricciones globales

Si se desea que un parámetro de una ruta siempre esté restringido por una expresión regular dada, se puede usar el método pattern. Este deberá de ser configurado en el Router ServiceProvider, en el método boot


 

public function boot()

{

    Route::pattern('id', '[0-9]+');

}

 

Una vez aplicado el patrón, este se aplicará automáticamente a todas las rutas que tengan el mismo nombre como parámetro

 

Route::get('/user/{id}', function ($id) {

    // Only executed if {id} is numeric...

});

Rutas con nombre

Se puede colocar un nombre o alias a una ruta mediante el método name, esto facilitará a la hora de usar cualquier helper que use alguna ruta. 

 

Route::get('/user/profile', function () {

    //

})->name('profile');

Recuerda que los nombres de rutas siempre deberán de ser únicos en toda la aplicación.


 

Generar URL mediante el nombre de la ruta

Una vez que una ruta tenga un nombre asignado, este podrá ser utilizado fácilmente en las funciones auxiliares route y redirect

 

// Generating URLs...

$url = route('profile');

 

// Generating Redirects...

return redirect()->route('profile');

En caso de que la ruta lleve parámetros, estos pueden ser pasados como segundo argumento en la función router, los parámetros se insertarán automáticamente en la URL generada en sus posiciones correctas

 

Route::get('/user/{id}/profile', function ($id) {

    //

})->name('profile');

 

$url = route('profile', ['id' => 1]);

Si se pasan parámetros adicionales en el array, estos se agregaran automáticamente en la cadena de la consulta de la URL

 

Route::get('/user/{id}/profile', function ($id) {

    //

})->name('profile');

 

$url = route('profile', ['id' => 1, 'photos' => 'yes']);

 

// /user/1/profile?photos=yes

 

Grupo de rutas

Los grupos de rutas, son útiles cuando requieres que múltiples URL compartan el mismo middleware o cualquier otro atributo de ruta, asi no tendras que definirlo en cada una de las rutas de forma individual




 

Middleware

Para asignar un middleware dentro de un grupo de rutas, se puede usar el método middleware antes de definir dicho grupo. Los middlewares se ejecutarán en el orden en que aparecen dentro del array

 

Route::middleware(['first', 'second'])->group(function () {

    Route::get('/', function () {

        // Uses first & second middleware...

    });

 

    Route::get('/user/profile', function () {

        // Uses first & second middleware...

    });

});

avatar jose luis luna rubio

Quieres estudiar en Platzi?

Estudia mas de 240 cursos y 48 carreras

Obten 1 Mes Gratis