#php #forms #symfony #symfony-2.5
#php #формы #symfony #symfony-2.5
Вопрос:
Я следовал этому руководству, чтобы создать регистрационную форму с Symfony 2.5.
Единственным отличием, которое я сделал, было дополнительное поле для имени пользователя в моем User
классе и отображение его в UserType
форме.
При отправке формы в account_create
-route (который в конечном итоге использует create
действие в контроллере учетной записи) он не будет правильно обрабатывать форму. Страница отображается пустой, даже профилировщик больше не отображается.
Кроме того, похоже, что скрипт ломает мой Apache (я запускаю его локально в Windows через XAMPP), поскольку все, что я пытаюсь сделать после отправки формы один раз, приводит к бесконечной загрузке. Это означает, что независимо от того, к какой странице на моем сервере я пытаюсь получить доступ следующим (даже если это просто профилировщик), я не могу. Он просто продолжает загружаться вечно (однажды я ждал более 10 минут). Тогда помог только перезапуск Apache.
Это мое createAction внутри контроллера учетной записи
// 'account_create' route
// TestBundle:Account:create
public function createAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
echo "Doctrine managed. ";
$form = $this->createForm(new RegistrationType(), new Registration());
echo "Form created. ";
$form->handleRequest($request);
echo "Request handled. ";
if ($form->isValid()) {
$registration = $form->getData();
echo "Form data received. ";
$em->persist($registration->getUser());
echo "User persisted. ";
$em->flush();
echo "Toilet flushed. ";
return $this->redirect($this->generateUrl('admin_page'));
}
return $this->render(
'TestBundle:Account:register.html.twig',
array('form' => $form->createView())
);
}
Он только выводит Doctrine managed. Form created.
, поэтому, по-видимому, происходит сбой при вызове handleRequest($request)
метода.
Что это, это так ужасно неправильно?
Скажите мне, нужен ли вам код каких-либо других скриптов!
Комментарии:
1. Вы добавили GetUserName() и setUsername() в класс entity ?
2. @Timmz: Я сделал. Класс User имеет методы получения и установки для каждого значения, к которому обращается форма.
3. попробуйте: DoctrineCommonUtilDebug::dump($request); чтобы увидеть, что находится в этом объекте..
4. Вы в конце концов нашли решение? У меня похожая проблема: скрипт останавливается при handleRequest($request) — без каких-либо ошибок или исключений. Журналы приложений пусты, журналы php пусты, журналы nginx пусты. Локально (xampp в Windows, php 5.5.10) работает как шарм. Но сбой на сервере (ubuntu, nginx, php-fpm 5.5.13).
Ответ №1:
я знаю, что это не ответ, но в любом случае он не подходит в качестве комментария и является важным шагом для отладки этого
поместите запрос на обработку в блок try и повторите исключение
try {
$form->handleRequest($request);
} catch (Exception $e) {
echo "failed : ".$e->getMessage();
}
какое исключение выдается?
Комментарии:
1. По какой-то причине он не выдает исключение, если я использую try-catch-block . Но разве Symfony не должен сам перехватывать исключения и отслеживать их для меня в
dev
-environment?2. Я также попытался привязать пользовательский обработчик ошибок
set_error_handler()
на случай, если это ошибка, а не исключение. Скрипт по-прежнему просто перестает выполняться вместо того, чтобы что-либо перехватывать.3. да, это странно, вы «используете» классы RegistrationType и Registration в своем документе? попробуйте установить их как переменные, например, $type = new RegistrationType() .. возможно, это точка отказа
4. Я делаю. Оба
TestTestBundleFormTypeRegistrationType
иTestTestBundleFormModelRegistration
используютсяuse
совместно.