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

Próxima revisión
Revisión previa
informatica:programacion:php:frameworks:laravel:rutas [2023/06/10 15:09] – creado 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 53: Línea 53:
 </code> </code>
  
-==== Crendo rutas ====+===== Creando rutas =====
  
 <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 ===== 
 + 
 +Usando el //helper// ''route'' podemos obtener la URL de cada ruta. 
 + 
 +<code html5> 
 +<a class="btn btn-success" href="{{ route("products.create") }}">Create</a> 
 + 
 +<!-- --> 
 + 
 +    <td> 
 +        <a class="btn btn-link" href="{{ route("products.show, ["product" => $product->id]) }}>Show</a> 
 +        <a class="btn btn-link" href="{{ route("products.edit, ["product" => $product->id]) }}>Edit</a> 
 +    </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>
informatica/programacion/php/frameworks/laravel/rutas.1686402561.txt.gz · Última modificación: por tempwin