1

今朝からエンティティの更新で立ち往生しています。何が欠けているのかわかりません。これは初心者の間違いだと確信しています。

フォームを介して何かを更新しようとしています。

コントローラー:

public function editAction($pid, $plid, Request $request)
{
    $plan = new Plan();
    $form = $this->createForm(new PlanType(), $plan);

    $plan = $this->getDoctrine()->getRepository('QArthFrameworkBundle:Plan')->findOneByPlid($plid);
    $project = $this->getDoctrine()->getRepository('QArthFrameworkBundle:Project')->findOneByPid($pid);

    $form->handleRequest($request);
    if ($request->getMethod() == 'POST') {

            $em = $this->getDoctrine()->getManager();
            $em->flush();

            return $this->redirect($this->generateUrl('qarth_framework_plan_edit', array('pid' => $pid, 'plid' => $plid)));
    }

    return $this->render('QArthFrameworkBundle:Pages:plan_edit.html.twig', array(
        'plan' => $plan,
        'project' => $project,
        'form' => $form->createView(),
    ));
}

フォーム:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('name');
    $builder->add('description', 'textarea');
}

エンティティ : http://pastebin.com/bTqKehyQ

プロファイラーを使用すると、投稿パラメーターが適切に投稿されていることがわかります

plan    {"name":"fsggsfgsf","description":"gsfgsfgsf","_token":"7d089aca0203c60fe1e617488e532ac966101440"}

しかし、更新クエリなどの痕跡は見られません。あなたがアイデアを持っているなら、それは素晴らしいことです!

どうもありがとう、

ベン

4

1 に答える 1

0

クエリされたプランをフォームに渡す必要があります。

public function editAction($pid, $plid, Request $request)
{
    $plan = $this->getDoctrine()->getRepository('QArthFrameworkBundle:Plan')->findOneByPlid($plid);
    $project = $this->getDoctrine()->getRepository('QArthFrameworkBundle:Project')->findOneByPid($pid);

// Create a new one if not found
if (!$plan) $plan = new Plan();

// Build your form using queried or new plan
$form = $this->createForm(new PlanType(), $plan);

$form->handleRequest($request);

// Checks for POST as well as validity
if ($form->isValid()) {

        $em = $this->getDoctrine()->getManager();
        $em->persist($plan);  // To handle new plans, no impact for existting plans
        $em->flush();

// Rest is the same
于 2013-08-07T14:48:01.827 に答える