у меня есть динамический форма.
Например, если что-то, моя форма содержит FormType1, иначе моя форма содержит FormType2 или FormType3 ….
Я бы обнаружил, если моя форма изменена.
Если моя форма заполнена, я подаю заявление valid()
метод, и если есть ошибка, я возвращаю в форме или, если нет ошибки, я применяю перенаправление.
Я знаю, как это сделать.
Но, если бы мой фом был представлен без изменений (без нового значения) Я хочу применить другое перенаправление без проверки потому что моя проверка вернет false с обязательными полями.
Я не могу проверить, все ли значения равны NULL, потому что в форме может быть комбобокс, логическое или начальное значение, …
У меня есть решение с помощью JavaScript и две кнопки отправки.
Если значение кнопки submit равно just_redirection, я не применяю валидацию, иначе я применяю валидацию.
Есть ли способ в Symfony2 (или полный PHP) узнать, совпадает ли отправленная форма с первоначальной?
Давайте предположим, что ваша форма связана с сущностью MyEntity
в вашем контроллере вам нужно скопировать ваш оригинальный объект, позвольте форме обработать запрос, затем сравните ваши объекты:
public function aRouteAction(Request $request, MyEntity $myEntity)
{
$entityFromForm = clone $myEntity;
// you need to clone your object, because since PHP5 a variable contains a reference to the object, so $entityFromForm = $myEntity wouldn't work
$form = $this->createForm(new MyFormType(), $entityFromForm);
$form->handleRequest($request);
if($entityFromForm == $myEntity) {
// redirect when no changes
}
if($form->isValid()) {
// redirect when there are changes and form submission is valid
}
else {
// return errors
}
}
Для клонирования объекта, пожалуйста, обратитесь к Руководство по PHP.
Других решений пока нет …