簡體   English   中英

如何指定Symfony2 Form-> handleRequest使用的EntityManager?

[英]How do I specify the EntityManager used by Symfony2 Form->handleRequest?

我的Symfony2應用程序有多個EntityManager。 我設置了默認值,然后列出了其他幾個。 除了Forms之外,此配置在我的代碼中有效並且起作用。

嘗試處理請求時, handleRequest(mixed $request = null)出現錯誤,因為我要驗證表單所針對的實體類型在默認管理器中不存在,但在另一個管理器中。

有沒有辦法指定在處理請求時使用哪個實體管理器?

$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函數針對存在User表的dev EntityManager進行檢查。 整個功能如下。 僅使用默認的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())
    );
}

我的多實體學說配置可在應用程序的所有其他方面起作用。 我能夠利用默認管理器加載應用程序范圍的設置,並使用子域來選擇一個EntityManager來檢查登錄,選擇,特定於機構的設置等。

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

事實證明, handleRequest是遍歷並解析您的Entity批注並確保不違反Constraints的函數。 在我的用戶表中,我確定了一個UniqueEntity約束,該約束已檢查My\\Bundle\\Entity\\User.php內的用戶名字段。

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

具體來說,正是這個約束引用了默認的EntityManager,而不是handleRequest的調用。 刪除此約束可以處理請求並保留表單。

因此,我將此問題標記為已回答。 我將進行更深入的研究,以查看是否可以在檢查約束時指定使用哪個EntityManager並在仍然卡住的情況下創建新線程。

我有完全相同的問題。 似乎handleRequest方法使用第一個可用的實體管理器,該管理器具有要保留的實體的映射,不一定是正確的。 我也想知道如何指定另一個實體管理器。

是否有任何新的解決方案或更新?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM