HttpPost
El controlador de Magento 2 puede recibir peticiones del tipo GET, POST, etc. Si está para recibir peticiones del tipo POST, se tienen que cumplir unas condiciones.
Las condiciones son:
- El método de la petición tiene que ser del tipo POST
- La cabecera de la petición tiene que tener la propiedad X-Requested-With: "XMLHttpRequest". Son peticiones propias de Ajax.
El controlador también puede recibir peticiones POST, GET etc. sin HEADER, la condición es que implemente el interface CsrfAwareActionInterface y pondremos nuestras propias reglas de validación.
El siguiente trozo de código comprueba la validez de las peticiones del tipo POST.
# lib/internal/Magento/Framework/App/Request/CsrfValidator.php
private function validateRequest(
HttpRequest $request,
ActionInterface $action
): bool {
$valid = null;
if ($action instanceof CsrfAwareActionInterface) {
$valid = $action->validateForCsrf($request);
}
if ($valid === null) {
$valid = !$request->isPost()
|| $request->isXmlHttpRequest()
|| $this->formKeyValidator->validate($request);
}
return $valid;
}
Por ello, el envío de los datos de los formularios se hace casi siempre con javascript mediante el método Ajax, que por defecto lleva el header XMLHttpRequest.