Как указать EntityManager, используемый Symfony2 Form-> gt; handleRequest?

У меня есть несколько EntityManager для моего приложения Symfony2. Я установил значение по умолчанию, а затем перечислил несколько других. Эта конфигурация работает и работает в моем коде, за исключением форм.

При попытке обработать запрос handleRequest(mixed $request = null) представляет ошибку, так как тип сущности, по которому я пытаюсь проверить форму, существует не в менеджере по умолчанию, а внутри другого.

Есть ли способ указать, какой Entity Manager используется при обработке запроса?

$form = $this->createForm(
new UserType(), $user
);

$form->handleRequest($request); // $request is coming from form submission

Ошибка, которую я получаю, ясна:

An exception occurred while executing [select statement appears here]

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'DEFAULTENTITY.User' doesn't exist

Это правда, что таблица User не существует в сущности по умолчанию, поэтому эта ошибка не является неожиданной. Я хочу иметь возможность указать, что функция handleRequest проверяет dev EntityManager, где таблица User существует.
Функция полностью представлена ​​ниже. Эта функция прекрасно работает при использовании только EntityManager по умолчанию, но не работает, когда я реализовал среду с несколькими менеджерами:

public function addAction(Request $request)
{
$user = new User();

$form = $this->createForm(new UserType(), $user);

$form->handleRequest($request);

// Respond to a form submission
if ( $form->isValid()) {
$em = $this->getDoctrine()->getManager( $this->currentManagerID );
$em->persist($user);
$em->flush();
return $this->redirect($this->generateUrl('user_add'));
}

// Render the form
return $this->render(
'MyBundle:User:create.html.twig',
array('form' => $form->createView())
);
}

Моя конфигурация Doctrine с несколькими объектами работает во всех других аспектах приложения. Я могу использовать менеджер по умолчанию для загрузки настроек всего приложения и использовать субдомен, чтобы выбрать EntityManager, для которого нужно проверять вход, выбор, настройки конкретного учреждения и т. Д.

orm:
default_entity_manager: default
auto_generate_proxy_classes: "%kernel.debug%"entity_managers:
default:
connection: default
mappings:
MyBundle: ~
dev:
connection: dev
mappings:
MyBundle: ~

2

Решение

Оказывается, что handleRequest это функция, которая просматривает и анализирует ваши аннотации сущностей и гарантирует, что ограничения не нарушаются. В своей таблице «Пользователь» я определил ограничение UniqueEntity, которое проверялось в поле имени пользователя внутри My\Bundle\Entity\User.php,

@UniqueEntity(fields="username", message="Username already taken")

В частности, именно это ограничение ссылалось на EntityManager по умолчанию, а не на вызов handleRequest, Снятие этого ограничения позволило обработать запрос и сохранить форму.

Таким образом, я отмечаю этот вопрос как ответ. Я проведу более тщательное исследование, чтобы выяснить, могу ли я указать, какой EntityManager используется при проверке ограничений, и создать новый поток в случае, если я все еще застрял.

0

Другие решения

У меня точно такая же проблема. Похоже, что метод handleRequest использует первый доступный диспетчер сущностей, который имеет сопоставления для сохраняемой сущности, которая не обязательно является правильной. Я также хотел бы знать, как указать другого менеджера сущностей.

Есть ли новые решения или обновления?

0

По вопросам рекламы [email protected]