Как получить значения формы в контроллере Symfony2 - PullRequest
78 голосов
/ 24 января 2012

Я использую форму входа в Symfony2 со следующим кодом контроллера

public function loginAction(Request $request)
{
    $user = new SiteUser();
    $form = $this->createForm(new LoginType(), $user);


    if ($request->getMethod() == 'POST') {
        $form->bindRequest($request);
        $data = $form->getValues();
        // Need to do something with the data here
    }

    return $this->render('GDSiteBundle::header.html.twig', array('form' => $form->createView()));
}

Но я получаю следующее предупреждение:

Предупреждение: array_replace_recursive () [function.array-replace-recursive]: Аргумент # 1 не является массивом в строке \ vendor \ symfony \ src \ Symfony \ Component \ Form \ Form.php 593 500 Внутренняя ошибка сервера - ErrorException

Может кто-нибудь помочь мне понять, что неверно, и как я могу это исправить? Благодаря.

Обновление: Файл ветки выглядит примерно так:

<div class="form">
    {{ form_errors(form) }}
    <form action="{{ path('site_user_login') }}" method="POST" {{ form_enctype(form) }}>
        <div class="level1">
            {{ form_row(form.username) }}
            <a href="javascript:void(0)" id="inscription">{% trans %}Registration{% endtrans %}</a>
        </div>
        <div class="level2">
            {{ form_row(form.pwd_hash) }}
            <div class="forget_pass"><a href="#" id="frgt">{% trans %}Forgot Password ?{% endtrans %}</a></div>
        </div>
        <input type="submit" class="submit" name="login" value/>
        <div class="clr"></div>
    </form>
</div>

Вот функция в Типе формы

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('username', 'text', array('label' => 'Username : '));
    $builder->add('pwd_hash','password', array('label' => 'Password : '));
}

Вот маршрут:

site_user_login:
    pattern: /{_locale}/login
    defaults: {_controller: GDSiteBundle:SiteUser:login}

Ответы [ 12 ]

92 голосов
/ 05 октября 2012

Просто:

$data = $form->getData();
90 голосов
/ 06 апреля 2012

Ничто из вышеперечисленного не сработало для меня. Это работает для меня:

$username = $form["username"]->getData();
$password = $form["password"]->getData();

Надеюсь, это поможет.

57 голосов
/ 12 ноября 2013

В Symfony 2 (точнее, версии 2.3) вы можете получить данные поля по

$var = $form->get('yourformfieldname')->getData();

или вы можете получить все отправленные данные

$data = $form->getData();

где '$ data' - это массив, содержащий значения ваших полей формы.

20 голосов
/ 21 января 2015

В Symfony> = 2.3 вы можете получить значение отдельных полей с помощью:

$var = $form->get('yourformfieldname')->getData();

С другой стороны, вы можете использовать:

$data = $form->getData();

НО это даст вам две разные вещи:

  • сущность со значениями, заполняемыми формой, если в вашей форме включена опция data-class (поэтому она привязана к сущности); исключит любое поле с опцией 'mapping' => false

  • в противном случае - массив со всеми полями формы

15 голосов
/ 14 марта 2015

Если у вас есть дополнительные поля в форме, которые не определены в Entity, $form->getData() не работает, один из способов может быть следующим:

$request->get("form")["foo"] 

Или:

$form->get('foo')->getData();
5 голосов
/ 24 декабря 2016

В Symfony формах существует два различных типа трансформаторов и три различных типа базовых данных: enter image description here В любой форме три разныхТипы данных:

  • Данные модели

    Это данные в формате, используемом в вашем приложении (например, объект Issue).Если вы звоните Form::getData() или Form::setData(), вы имеете дело с данными "модели".

  • Норма данных

    Этонормализованная версия ваших данных и обычно совпадает с вашими «модельными» данными (хотя не в нашем примере).Обычно он не используется напрямую.

  • Просмотр данных

    Этот формат используется для заполнения самих полей формы.Это также формат, в котором пользователь будет отправлять данные.Когда вы вызываете Form::submit($data), $ data находится в формате данных «view».

Два различных типа преобразователей помогают преобразовывать данные в каждый из этих типов данных и из них:

  • Модельные трансформаторы :

    transform(): "данные модели" => "данные нормы"
    reverseTransform(): "данные нормы"=>" данные модели "

  • Просмотр трансформаторов :

    transform():" норма данных "=>" просмотр данных "
    reverseTransform(): "view data" => "norm data"

Какой трансформатор вам нужен, зависит от вашей ситуации.

Чтобы использовать преобразователь вида, позвоните addViewTransformer().


Если вы хотите получить все данные формы:

$form->getData();

Если вам нужно определенное поле формы (например, first_name):

$form->get('first_name')->getData();
4 голосов
/ 16 апреля 2012

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

$form->getViewData();
$form->getClientData(); // Deprecated since version 2.1, to be removed in 2.3.
4 голосов
/ 26 января 2012

Я получил это с помощью этого:

if ($request->getMethod() == 'POST') {
    $username = $request->request->get('username');
    $password = $request->request->get('password');

    // Do something with the post data
}

Вам необходимо иметь запрос Request $ как параметр и в функции!Надеюсь, это поможет.

3 голосов
/ 28 декабря 2014
private function getFormDataArray($form)
{
    $data = [];
    foreach ( $form as $key => $value) {
        $data[$key] = $value->getData();
    }
    return $data;
}
2 голосов
/ 30 января 2019

Чтобы получить данные определенного поля,

$form->get('fieldName')->getData();

Или для всех данных формы

$form->getData();

Ссылка на документы: https://symfony.com/doc/2.7/forms.html

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