4

symfony2.16の製品のIDを使用して値を更新しています。これもMngoDBbundleを使用しています

しかし、私はこのようなエラーが発生しています

1行目のAcmeStoreBundle:Default:index.html.twigで、テンプレートのレンダリング中に例外がスローされました( "" acme_store_update "ルートにいくつかの必須パラメーター(" id ")がありません。")。

これは私のコントローラーです更新アクションを確認してください

<?php

namespace Acme\StoreBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Acme\StoreBundle\Document\Product;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;


class DefaultController extends Controller
{
    /**
     * @Route("/hello/{name}")
     * @Template()
     */
    public function indexAction($name)
    {
        return array('name' => $name);
    }

// ...

    /**
     * @Route("/create", name="acme_store_create")
     * @Template()
     */
    public function createAction(Request $request)
    {
        $product = new Product();
        //$product->setName('apple');
        //$product->setPrice('19.99');
        $form = $this->createFormBuilder($product)
            ->add('name', 'text')
            ->add('price', 'text')
            ->getForm();
        if ($request->getMethod() == 'POST') {
            $form->bind($request);
            if ($form->isValid()) {
                $req = $request->request->get('form');
                $product->setName($req['name']);
                $product->setPrice($req['price']);
                $dm = $this->get('doctrine.odm.mongodb.document_manager');
                $dm->persist($product);
                $dm->flush();
                return new Response('Name ='.$product->getName().', price ='.$product->getPrice());
            }
         }
            return $this->render('AcmeStoreBundle:Default:index.html.twig', array(
                'form' => $form->createView(),
            ));
    }
    // ...
    /**
     * @Route("/show/{id}", name="acme_store_show")
     * @Template()
     */
    public function showAction($id)
    {
        $product = $this->get('doctrine.odm.mongodb.document_manager')
            ->getRepository('AcmeStoreBundle:Product')
            ->find($id);

        if (!$product) {
            throw $this->createNotFoundException('No product found for id '.$id);
        }
        return new Response('Name ='.$product->getName().', price ='.$product->getPrice());
        // do something, like pass the $product object into a template
    }
    // ...
    /**
     * @Route("/update/{id}", name="acme_store_update")
     * @Template()
     */
    public function updateAction(Request $request,$id)
    {
        $dm = $this->get('doctrine.odm.mongodb.document_manager');
        $product = $dm->getRepository('AcmeStoreBundle:Product')->find($id);
        $form = $this->createFormBuilder($product)
            ->add('name', 'text')
            ->add('price', 'text')
            ->getForm();
        if ($request->getMethod() == 'POST') {
            $form->bind($request);
            if ($form->isValid()) {
                $req = $request->request->get('form');
                $product->setName($req['name']);
                $product->setPrice($req['price']);
                $dm->flush();
                return new Response('Name ='.$product->getName().', price ='.$product->getPrice());
            }
        }
            return $this->render('AcmeStoreBundle:Default:index.html.twig', array(
                'form' => $form->createView(),
            ));

    }
            // ...

}

私のindex.html.twigは

<form action="{{ path('acme_store_update') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}

    <input type="submit" />
</form>

idを使用して値を更新する方法私を助けてください

4

3 に答える 3

5

updateAction$idで、テンプレート変数に追加します。

return $this->render('AcmeStoreBundle:Default:index.html.twig', array(
    'form' => $form->createView(),
    'product_id' => $id,
));

テンプレートで、関数にproduct_idパラメータを追加します。path

<form action="{{ path('acme_store_update', {id: product_id}) }}" method="post" {{ form_enctype(form) }}>
    ....

http://symfony.com/doc/current/book/routing.html

于 2013-01-15T12:30:16.543 に答える
2

私の場合、エラーはエラー出力のテンプレートファイルではなく、拡張中のTWIGファイルにありました。私が使用していた小枝ファイル:

path( app.request.attributes.get('_route')) 

..URLパスを取得しようとします。必要なパラメーターが指定されなかったため、これによりエラーが発生しました。

私はURLを取得するために正しい方法を使用しました:

{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}

..そしてエラーはなくなりました。

于 2013-10-04T14:18:58.027 に答える
0

そのルーティングファイルで、トークンではなく誤ってIdを入力したため、このエラーが発生しました(AcmeStoreBundle:Default:index.html.twigでテンプレートのレンダリング中に例外がスローされました(「acme_store_updateルートに必須パラメーターが欠落しています(id)」)。 1行目)

例:.ymlファイルのibw_job_edit:

pattern:  /{id}/edit
defaults: { _controller: "IbwJobeetBundle:Job:edit" }

この代わりに、ibw_job_editを作成する必要があります。

   pattern:  /{token}/edit
    defaults: { _controller: "IbwJobeetBundle:Job:edit" }
于 2014-08-14T05:22:20.390 に答える