Форма фиксации Symfony2 с использованием Doctrine - MappingException

Я создал форму с помощью Propel, которая представляет штраф и проверяет. Проблема возникает, когда я пытаюсь зафиксировать объект $ user - я получаю исключение MappingException. Я действительно не знаю, откуда это происходит, поскольку предыдущие ссылки на пользователя $ кажутся прекрасными.

Обратите внимание, что прокомментированная строка взята из некоторых справочников форм, но вставляет пустую строку в базу данных (хотя var_dump из $ user показывает, что у нее есть вся информация. Я был бы рад, если бы я мог заставить это работать как альтернатива.

Вот мой код:

namespace LifeMirror\APIBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use LifeMirror\APIBundle\Model\Users;
use LifeMirror\APIBundle\Model\UsersQuery;
use LifeMirror\APIBundle\Form\Type\UsersType;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use FOS\RestBundle\View\View;

class RegisterController extends Controller
{
    public function indexAction()
    {
        return $this->processForm(new Users());
    }

    private function processForm(Users $user)
    {
        $statusCode = $user->isNew() ? 201 : 204;
        $em = $this->getDoctrine()->getEntityManager();
        $form = $this->createForm(new UsersType(), $user);
        //die(phpinfo());
        $form->bind(array(
            "firstName" => $this->getRequest()->request->get('firstName'),
            "lastName" => $this->getRequest()->request->get('lastName'),
            "email" => $this->getRequest()->request->get('email'),
            "password" => $this->getRequest()->request->get('password'),
            "dob" => array(
                "year" => json_decode($this->getRequest()->request->get('dob'))->year,
                "month" => json_decode($this->getRequest()->request->get('dob'))->month,
                "day" => json_decode($this->getRequest()->request->get('dob'))->day
            ),
            "location" => $this->getRequest()->request->get('location'),
            "tutorialWatched" => $this->getRequest()->request->get('tutorialWatched'),
            "challengeEmails" => $this->getRequest()->request->get('challengeEmails'),
            "mailingList" => $this->getRequest()->request->get('mailingList')
        ));

        if ($form->isValid()) {
            //$user->save();
            $em->persist($user);
            $em->flush();

            $response = new Response();
            $response->setStatusCode($statusCode);
            return $response;
        }
        $view = View::create($form, 400);
        $view->setFormat('json');
        return $view;
    }
}
0
nl ja de

2 ответы

Вы уверены, что имена полей: firstName , lastName и т. Д.? Обычно Propel генерирует имена полей в капитализированной CamelCase, поэтому я ожидаю увидеть FirstName и LastName . Если имена полей не совпадают точно, то Propel не будет присваивать значения и, следовательно, приведет к пустым INSERT . Вы можете сбросить список имен полей User следующим образом:

var_dump(BaseUserPeer::getFieldNames());
0
добавлено
Ну, для отладки вы можете просто поместить его там, где у вас есть die (phpinfo ()); , затем выполните простой exit; . Опять же, это просто посмотреть, что на самом деле есть имена полей модели, они должны будут соответствовать вашим атрибутам ввода name или вашим именам привязки ... или и тем, и другим.
добавлено автор jakerella, источник
Странно. Ну, вам может понадобиться найти, где находится этот класс Peer, если вы создали Propel 1.6, он должен быть где-то там. Или вы используете старую версию Propel?
добавлено автор jakerella, источник
Хммм ... если вы включили файл, и PHP говорит, что класс не существует, я не уверен, что еще вы можете сделать. Я полагаю, вы могли бы выполнить явный require ('/ path/to/BaseUsersPeer.php'); перед выполнением вызова var_dump (BaseUserPeer :: getFieldNames ()) .
добавлено автор jakerella, источник
Это маловероятно, если вы создали классы. Вы всегда можете генерировать и, возможно, дважды проверить имя класса, как определено в файле, - они могут быть изменены в build.properties.
добавлено автор jakerella, источник
Где я могу поместить этот код?
добавлено автор James, источник
`Неустранимая ошибка: класс 'LifeMirror \ APIBundle \ Controller \ BaseUsersPeer' не найден в /home/nginx/domains/lifemirror.org/public/src/LifeMirror/API‌ Bundle/Controller/Re & zwnj; gisterController.php в строке 24 `(это пользователи, а не пользователь)
добавлено автор James, источник
Да, 1.6.7. BaseUsersPeer.php находится в LifeMirror \ APIBundle \ Model \ om, который включен в UsersPeer.php, который я только что включил в RegisterController без эффекта.
добавлено автор James, источник
По-прежнему отображается та же ошибка. Может ли что-то отсутствовать в BaseUsersPeer?
добавлено автор James, источник

Кажется, вы пытаетесь сохранить объект Propel, используя доктрину.

Это не то, что вы хотите, даже если это теоретически возможно, если вы добавите некоторое сопоставление доктрины для класса Model \ Users .

Вы действительно хотите сохранить состояние $ user :

if ($form->isValid()) {
    $user->save();//propel object implements Active Record pattern, they can save themselves, no doctrine entityManager needed.
}
0
добавлено
Я пробовал это, но он создает пустую строку в базе данных. Я включил ведение журнала запросов MySQL и заметил, что он выполняет запрос: INSERT INTO users` ( ID ) VALUES (NULL) `.
добавлено автор James, источник
См. pastebin.com/eEQDthxN для var_dump пользователя $.
добавлено автор James, источник
Простите мое невежество, но какой файл вы имеете в виду?
добавлено автор James, источник
Кстати, это больше проблема Propel. Прежде чем пытаться его сохранить, вы должны проверить состояние своего объекта $ user . Это, конечно, пустой объект. Кроме того, ваше картирование пропеллера, возможно, неверно. Возможно, вы забыли описать идентификатор как первичный ключ с автоматическим приращением.
добавлено автор Florian, источник
добавлено автор Florian, источник
добавлено автор Florian, источник
каково ваше отображение движений для этого объекта?
добавлено автор Florian, источник
Вы используете Propel, верно? Если это так, у вас должен быть файл конфигурации сопоставления (xml).
добавлено автор Florian, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

symfony
symfony
1 045 участник(ов)

Сообщество Symfony, Symfony Components, Symfony Framework. Вакансии: https://t.me/symfony_careers Официальный slack: https://symfony.com/slack-invite

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

symfony
symfony
354 участник(ов)

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp