Как получить значения формы в контроллере Symfony2
Я использую форму входа на 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() [функция.массив-заменить-рекурсивные]: Аргумент #1-это не массив в поставщикав Symfonyницв Symfonyкомпонентформаформа.php строка 593 500 Внутренняя Ошибка Сервера - ErrorException
кто-нибудь может помочь мне понять, что неправильно, и как я могу это исправить? Спасибо.
обновление: Файл twig выглядит примерно так:
<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}
11 ответов:
ни один из выше работал для меня. Это работает для меня:
$username = $form["username"]->getData(); $password = $form["password"]->getData();
Я надеюсь, что это помогает.
в Symfony 2 (точнее, в версии 2.3) вы можете получить данные поля по
$var = $form->get('yourformfieldname')->getData();
или вы можете получить все данные, отправленные
$data = $form->getData();
где '$data' - это массив, содержащий значения полей формы.
в Symfony >= 2.3, вы можете получить значение одного поля с:
$var = $form->get('yourformfieldname')->getData();
С другой стороны, вы можете использовать:
$data = $form->getData();
но это вам две разные вещи:
сущность со значениями, заполненными формой, если ваша форма имеет
data-class
опция включена (так что он привязан к сущности); это будет исключить любое поле с'mapping' => false
опциив противном случае массив со всеми полями формы
Если у вас есть лишние поля в форме, которая не определена в сущности ,
$form->getData()
не работает, один из способов может быть так:$request->get("form")["foo"]
или :
$form->get('foo')->getData();
В Symfony формы, есть два разных типа трансформаторы и три различных типа базовых данных: В любом виде, три различных типа данных являются:
модель данных
это данные в формате, используемом в вашем приложении (например, объект проблемы). Если вы позвоните
Form::getData()
илиForm::setData()
, вы имеете дело с моделью "" данные.Норма Данных
это нормализованная версия ваших данных и обычно совпадает с вашими данными" модели " (хотя и не в нашем примере). Он обычно не используется напрямую.
Просмотр Данных
это формат, который используется для заполнения самих полей формы. Это также формат, в котором пользователь будет отправлять данные. Когда вы звоните
Form::submit($data)
, $data находится в формат данных "просмотр".два различных типа трансформаторов помогают конвертировать в и из каждого из этих типов данных:
модели трансформеры:
transform()
: "модельные данные" = > "нормальные данные"reverseTransform()
: "нормальные данные" = > "модельные данные"посмотреть Трансформеры:
transform()
: "нормальные данные" = > "просмотр данных"reverseTransform()
: "просмотреть данные" = > "нормальные данные"какой трансформатор вам нужен, зависит от вашей ситуации.
чтобы использовать трансформатор вида, позвоните
addViewTransformer()
.
если вы хотите получить все данные вида:
$form->getData();
если вы после определенного поля формы (например,
first_name
):$form->get('first_name')->getData();
Я думаю, что для того, чтобы получить данные запроса, связанные и проверенные объектом формы, вы должны использовать эту команду:
$form->getViewData(); $form->getClientData(); // Deprecated since version 2.1, to be removed in 2.3.
private function getFormDataArray($form) { $data = []; foreach ( $form as $key => $value) { $data[$key] = $value->getData(); } return $data; }
Если вы используете Symfony 2 security management, вам не нужно получать опубликованные значения, вам нужно только управлять шаблоном формы (см. документация).
Если вы не используете Symfony 2 security management, я настоятельно рекомендую вам использовать его. Если вы не хотите или если вы не можете, вы можете дать нам
LoginType
'источники ?