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.