Herramientas de usuario

Herramientas del sitio


informatica:programacion:php:frameworks:laravel:rutas

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:programacion:php:frameworks:laravel:rutas [2023/06/13 10:25] – [Creando rutas] tempwininformatica:programacion:php:frameworks:laravel:rutas [2025/02/11 13:04] (actual) – [Creando rutas] tempwin
Línea 3: Línea 3:
 [[informatica:programacion:php:frameworks:laravel|Laravel]] [[informatica:programacion:php:frameworks:laravel|Laravel]]
  
-Según lo que se indique por URL, Laravel servirá uno u otro contenido. Esto está definido en las rutas, que están en el directorio ''app/routes''+Según lo que se indique por URL, Laravel servirá uno u otro contenido. Esto está definido en las rutas, que están en el directorio ''routes''
  
-''app/Providers/RouterServiceProvider.php'' es el provider relacionado con las rutas. El trabajo de los providers, una vez cargados por el kernel, es registrar diferentes componentes necesarios por el kernel+''app/Providers/RouteServiceProvider.php'' es el provider relacionado con las rutas. El trabajo de los providers, una vez cargados por el kernel, es registrar diferentes componentes necesarios por el kernel
  
  
-Por ejemplo, el fichero ''app/routes/web.php'':+Por ejemplo, el fichero ''routes/web.php'':
  
 <code php> <code php>
Línea 22: Línea 22:
 En el ejemplo anterior tenemos definidas 2 rutas: la principal (cuando no se pasa nada más por URL que el dominio donde está la aplicación) y hola, es decir, cuando vamos a miweb.com/hola En el ejemplo anterior tenemos definidas 2 rutas: la principal (cuando no se pasa nada más por URL que el dominio donde está la aplicación) y hola, es decir, cuando vamos a miweb.com/hola
  
-Si queremos pasar alguna "variable" a una ruta, lo haríamos de la siguiente manera:+Si queremos pasar alguna "variable" / parámetro a una ruta, lo haríamos de la siguiente manera:
  
 <code php> <code php>
Línea 62: Línea 62:
  
 Vemos que se compone de verbo HTTP, URL y la acción a realizar y el nombre. Vemos que se compone de verbo HTTP, URL y la acción a realizar y el nombre.
 +
 +<WRAP center round info 60%>
 +Las diferentes peticiones HTTP son: GET, POST, PUT, PATCH y DELETE. Las tres últimas son peticiones tipo POST, pero tienen tareas distintas. PUT y PATCH se utilizan para actualizar un registro y DELETE para eliminar.
 +</WRAP>
 +
  
 Otra ruta: Otra ruta:
Línea 118: Línea 123:
 </code> </code>
  
-Podemos ver información sobre esas rutas mediante:+<WRAP center round important 60%> 
 +Es muy importante tener en cuenta el orden de las rutas ya que Laravel analiza la URL de arriba hacia abajo, así que empieza comprobando las primeras rutas definidas. 
 +</WRAP> 
 + 
 + 
 +Podemos ver el listado de las rutas registradas mediante el siguiente comando:
  
 <code> <code>
Línea 127: Línea 137:
 Una práctica recomendada es asignar un nombre a las rutas: Una práctica recomendada es asignar un nombre a las rutas:
  
-<code>+<code php>
 Route::get('/', function() { Route::get('/', function() {
     return view("welcome");     return view("welcome");
Línea 154: Línea 164:
 Las rutas responden a un verbo HTTP (GET, POST, PUT...) Las rutas responden a un verbo HTTP (GET, POST, PUT...)
  
-  * [[https://laravel.com/docs/10.x/routing|Laravel Routing]]+  * [[https://laravel.com/docs/11.x/routing|Laravel Routing]]
  
 ===== Llamar a las rutas ===== ===== Llamar a las rutas =====
Línea 170: Línea 180:
     </td>     </td>
 <!-- -->     <!-- -->    
 +</code>
 +
 +===== Rutas de recurso =====
 +
 +Conjunto de rutas centradas en la generación, edición y eliminación de un recurso (por ejemplo, Products, Orders...). Por ejemplo, para el recurso "products":
 +
 +<code php>
 +Route::resource("products", "ProductController")
 +</code>
 +
 +Vemos que se especifica el recurso y nombre del controlador que se encarga de él.
 +
 +Esa única línea ahorra tener que definir las siguientes rutas:
 +
 +<code php>
 +Route::get("products", "ProductController@index")->name("products.index");
 +Route::get("products/create", "ProductController@create")->name("products.create");
 +Route::get("products/{product}", "ProductController@show")->name("products.show");
 +Route::get("products/{product}/edit", "ProductController@edit")->name("products.edit");
 +Route::match(["put", "patch"], "products/{product}", "ProductController@update")->name("products.update");
 +Route::delete("products/{product}/edit", "ProductController@destroy")->name("products.destroy");
 +</code>
 +
 +<WRAP center round important 60%>
 +Esto solo funciona si somos consistentes en la forma de nombrar nuestros métodos y modelos. Es decir, gracias a que ''ProductController'' tiene métodos ''index'', ''create'', ''store'', ''edit'', ''update'' y ''destroy'', Laravel permite que usemos una ruta de recurso y todo funcionará perfectamente.
 +</WRAP>
 +
 +Si queremos decidir qué rutas:
 +
 +<code php>
 +Route::resource("products", "ProductController")->only(["index", "show", "create"]);
 +</code>
 +
 +Otra forma:
 +
 +<code php>
 +Route::resource("products", "ProductController")->except(["edit"]);
 +</code>
 +
 +<WRAP center round tip 60%>
 +Siempre podemos ejecutar ''php artisan route:list'' para ver las rutas que se generan en Laravel.
 +</WRAP>
 +
 +===== Grupo de rutas =====
 +
 +Si queremos separar rutas.
 +
 +En ''app/Providers/RouteServiceProvider.php'':
 +
 +<code php>
 +    // 
 +    public function map() 
 +    {
 +        // code
 +        $this->mapPanelRoutes();
 +    }
 +    
 +    // code
 +    
 +    // Definimos las rutas para el panel de administración
 +    protected function mapPanelRoutes()
 +    {
 +        Route::prefix("panel")
 +               ->middleware(["web", "auth"])
 +               ->namespace("{$this->namespace}\Panel")
 +               ->group(base_path("routes/panel.php"));
 +    }
 +</code>
 +
 +Creamos el fichero ''resources/routes/panel.php'':
 +
 +<code php>
 +use Illuminate\Support\Facades\Route;
 +
 +Route::resource("products", "ProductController");
 +</code>
 +
 +En este punto ya hemos hecho la separación conceptual entre lo que puede ver el usuario y el administrador.
 +
 +Creamos el controlador en ''app/Http/Controllers/Panel/ProductController.php'':
 +
 +<code php>
 +namespace App\Http\Controllers\Panel;
 +
 +use App\Http\Controllers\Controller;
 +use App\Http\Requests\ProductRequest;
 +use App\Models\Product;
 +
 +class ProductController extends Controller 
 +{
 +    // code
 +}
 </code> </code>
informatica/programacion/php/frameworks/laravel/rutas.1686644710.txt.gz · Última modificación: por tempwin