Gestión de Peticiones
Controlador de Acciones
En este capítulo, aprenderás cómo funcionan los controladores de acciones; y cómo puedes generarlos usando los generadores integrados.
Qué es un controlador?
Los controladores son la C del modelo MVC. Estos manejan la lógica dada la desición del enrutador, y generan una respuesta apropiada.
Por ejemplo, si solicitas la ruta /
de este sitio web, el controlador responsable de la página de inicio te producirá la página de inicio HTML tal y como la ves. Si estás construyendo una API REST, el controlador obtendrá o guardará algunos datos, y luego pedirá (amablemente) al motor de renderizado que produzca la respuesta apropiada.
En el caso de Buffalo, solemos llamar a los controladores “acciones”.
Definiendo una Acción
Las acciones (o controladores) de Buffalo son funciones de tipo Handler.
func Home(c buffalo.Context) error {
return c.Render(200, r.HTML("home.html"))
}
En este ejemplo, definimos una acción “Home”, y le pedimos al motor de renderizado que produzca una página HTML usando la plantilla “home.html”, y que responda con un código HTTP 200.
Cada acción toma un buffalo.Context
como parámetro: Revisa Contexto para aprender todo lo que puedes hacer con él.
Generando Acciones
Dado que escribir el código de las acciones es bastante redundante y repetitivo, Buffalo proporciona un generador para ayudarte.
$ buffalo g action --help
Generate new action(s)
Usage:
buffalo generate action [name] [handler name...] [flags]
Aliases:
action, a, actions
Flags:
-d, --dry-run dry run
-h, --help help for action
-m, --method string change the HTTP method for the generate action(s) (default "GET")
--skip-template skip generation of templates for action(s)
-v, --verbose verbosely run the generator
Para generar una acción para users
sólo debes escribir:
$ buffalo g a users show index create
Esto generará los siguientes archivos:
├── actions/
│ ├── users_test.go
│ └── users.go
│
└── templates/
└── users/
├── create.plush.html
├── index.plush.html
└── show.plush.html
Además, Buffalo registrará las rutas para users
en el archivo actions/app.go
:
// actions/app.go
app.GET("/users/show", UsersShow)
app.GET("/users/index", UsersIndex)
app.GET("/users/create", UsersCreate)
En algunos casos necesitarás generar una acción con un método HTTP diferente a GET
, para ese caso puedes usar el flag --method
, como en el siguiente ejemplo:
$ buffalo g actions users message --method POST
En algunos otros escenarios necesitarás generar una acción sin generar una plantilla HTML (por ejemplo, para una API). Para omitir la generación de la plantilla HTML para crear una acción, puede pasar el flag –skip-template al generador, es decir:
$ buffalo g actions users update --skip-template
--api
. Revisa APIs para mayor información.
Eliminando Acciones
Puedes eliminar los archivos generados por este generador ejecutando:
$ buffalo destroy action users
O en forma abreviada:
$ buffalo d a users