Отправка формы Symfony не работает

#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 совместно.