Я не могу восстановить значения моего флажка в контроллере - PullRequest
0 голосов
/ 08 апреля 2019

Я работаю над проектом Symfony, я создал флажок в ветке, я хочу получить проверенные значения в моем контроллере, но я все еще получаю нулевое значение, я не знаю, в чем проблема, пожалуйста, помогите:

Мое действие:

public function sendSmsAction(Request $request) {
    if ($request->isMethod('get')) {
        $ids = $request->query->get('id');
        var_dump($ids);
        die();
    }

    return $this->render('CeUtilisateurBundle:Utilisateur:sms.html.twig') 
}

Моя форма в веточке:

<form 
    method="GET" 
    action="{{path('ce_utilisateur_send_sms') }}" 
    id="lbad_form_sms" 
    name="users"
>
    {% if listUsers is not empty %}
        {% for usr in listUsers %}

            <input 
                id="userchecked" 
                name="{{usr.id}}" 
                type="checkbox" 
                value="{{ usr.telephone }}"
            />

            <span>{{ usr.username }}</span>
</form>

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Помимо других проблем в вашем примере, чтобы получить эти значения, вам нужно изменить часть HTML, которая отображает флажки, и присвоить им разные идентификаторы, правильные значения и одно и то же имя:

<input id="telephone{{ usr.id }}" name="telephone[]" type="checkbox" value="{{ usr.telephone }}"/> 

Обратите внимание, что свойство name одинаково для каждого флажка и имеет [] в конце - это позволяет передавать несколько значений для одного свойства.

Кроме того, я бы предложил использовать POST-запрос для отправки формы вместо GET, который вы используете. Если вы сделаете это, вы можете получить выбранные номера телефонов в контроллере следующим образом:

$telephones = $request->request->get('telephone');

Если вы хотите отправить форму с запросом GET, используйте query вместо request:

$telephones = $request->query->get('telephone');
0 голосов
/ 08 апреля 2019

Во-первых, вам не хватает закрывающих тегов в ветке для ваших if и for, но я предполагаю, что они просто потерялись во время копирования.

Во-вторых, вы присваиваете всем элементам ввода одинаковый идентификатор "userchecked". Каждый элемент HTML должен иметь уникальный идентификатор, например, добавив свой идентификатор пользователя.

Нечто подобное происходит с атрибутом имени. Если вы присваиваете нескольким элементам формы одно и то же имя, будет отправлен только последний.

Итак, ваша форма должна выглядеть примерно так:

<form 
    method="GET" 
    action="{{path('ce_utilisateur_send_sms') }}" 
    id="lbad_form_sms" 
    name="users"
>
    {% if listUsers is not empty %}
        {% for usr in listUsers %}
            <input 
                id="{{"userchecked_" ~ usr.id}}"
                name="{{"checked_" ~ usr.id}}"
                type="checkbox" 
                value="{{ usr.telephone }}"
            />

            <span>{{ usr.username }}</span>
        {% endfor %}
    {% endif %}

    <input type="submit" value="Envoyer un sms!"/>
</form>

Чтобы исправить ваш контроллер, вы должны получить ввод по имени поля. Поскольку он создается динамически, проще всего получить все параметры и выполнить цикл по ним.

public function sendSmsAction(Request $request) {
    if ($request->isMethod('get')) {
        $parameters = $request->query->all();
        foreach ($parameters as $name => $value) {
            var_dump("$name: $value");
        }
        die();
    }

    return $this->render('CeUtilisateurBundle:Utilisateur:sms.html.twig') 
}

Обратите внимание, что для пустого флажка не будет передан параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...