empty RequestDataBag $data in custom controller

Hallo,
Ich versuche herauszufinden, wie der Request Data Bag funktioniert.
Für einen custom Controller möchte ich die bereitgestellten Formdata abrufen und an das Frontend zurückschieben, wo sie im Form angezeigt werden.

Dies geschieht im registerController -> accountRegisterPage. Die bereitgestellten Formulardaten werden in RequestDataBag $data abgefangen und an das Frontend zurückgesendet.

/**
     * @Route("/account/register", name="frontend.account.register.page", methods={"GET"})
     */
    public function accountRegisterPage(Request $request, RequestDataBag $data, SalesChannelContext $context): Response
    {
        ....

        return $this->renderStorefront('@Storefront/page/account/register/index.html.twig', [
            'redirectTo' => $redirect,
            'redirectParameters' => $request->get('redirectParameters', json_encode([])),
            'page' => $page,
            'data' => $data,
        ]);
    }

 

{% block component_account_register_address_shipping_fields_address %}
    {% sw_include '@Storefront/component/address/address-form.html.twig' with {
        'prefix': 'shippingAddress',
        'data': data.get('shippingAddress')
    } %}
{% endblock %}

In meinen custom Controller verwende ich auch RequestDataBag $data, die jedoch immer leer sind.

Was vermisse ich?

Hallo,

wie sieht denn deine Form in Twig aus? 

Viele Grüße aus Schöppingen

cool Michael Telgmann

Hi Michael,

Hier ist meine Form. Es basiert auf dem Registrierungs formular.

        {% block component_mycontroller_form_fields %}
            

                {% block component_mycontroller_form_fields_salutation %}
                    
                        {% block component_mycontroller_form_fields_salutation_label %}
                            
                                {{ "account.salutationLabel"|trans }}{{ "general.required"|trans }}
                            
                        {% endblock %}

                        {% block component_mycontroller_form_fields_salutation_select %}
                            
                                {#{% if not data.get('salutation') %}#}
                                {% if not data.salutation %}
                                    
                                        {{ "account.salutationPlaceholder"|trans }}{{ "general.required"|trans }}
                                    
                                {% endif %}

                                {% for salutationRow in config.salutations %}
                                    {#
                                        {{ salutationRow }}
                                    
                                {% endfor %}
                            
                        {% endblock %}

                        {% block component_mycontroller_form_fields_salutation_select_error %}
                            {% if formViolations.getViolations('/salutation') is not empty %}
                                {% sw_include '@Storefront/utilities/form-violation.html.twig' with {
                                    violationPath: '/salutation'
                                } %}
                            {% endif %}
                        {% endblock %}
                    
                {% endblock %}

                {% block component_mycontroller_form_fields_firstname %}
                    
                        {% block component_mycontroller_form_fields_firstname_label %}
                            
                                Firstname
                            
                        {% endblock %}

                        {% block component_mycontroller_form_fields_firstname_input %}
                            #}
                                   value="{{ data.firstname }}">
                        {% endblock %}
                    
                {% endblock %}

                {% block component_mycontroller_form_fields_lastname %}
                    
                        {% block component_mycontroller_form_fields_lastname_label %}
                            
                                Lastname
                            
                        {% endblock %}

                        {% block component_mycontroller_form_fields_lastname_input %}
                             #}
                                   value="{{ data.lastname }}">
                        {% endblock %}
                    
                {% endblock %}
            
        {% endblock %}


        {% block component_mycontroller_form_captcha %}
            {#TODO: NEXT-2002 - captcha#}
        {% endblock %}

        {% block component_mycontroller_form_required_fields %}
            
                {{ "general.requiredFields"|trans }}
            
        {% endblock %}

        {% block component_mycontroller_form_submit %}
            
                

                    {{ "mycontroller.registerSubmit"|trans }}
                
            
        {% endblock %}

 

Hallo,

da sieht man direkt das Problem  Smile Wie du hier siehst https://github.com/shopware/platform/blob/master/src/Core/Framework/Routing/RequestDataBagResolver.php#L19 werden nur Daten aus dem “request” Property von “Symfony\Component\HttpFoundation\Request” in den RequestDataBag abgelegt. In diesem Property befinden sich allerdings nur die POST Variablen. Du sendest deine Form allerdings mit GET.

Entweder du sendest deine Form über POST, oder du nutzt die “$request” Variable in deiner Methode und greifst auf “$request->query” zu.

Viele Grüße aus Schöppingen

cool Michael Telgmann