如何访问POST参数

时间:2014-05-19 22:04:54

标签: php symfony

我正在尝试学习symfony PHP框架,但与Ruby on Rails不同,它并不是非常直观。

我正在使用看起来像这个

的newAction渲染表单
public function newAction()
        {   
            $product = new Product();
            $form = $this->createForm(new ProductType(), $product);


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

它呈现非常简单的形式:

<form action="{{ path("AcmeStoreBundle_default_create") }}" method="post" {{ form_enctype(form) }} class="blogger">
        {{ form_errors(form) }}

        {{ form_row(form.price) }}
        {{ form_row(form.name) }}
        {{ form_row(form.description) }}

        {{ form_rest(form) }}

        <input type="submit" value="Submit" />

指向'创建'动作:

public function createAction()
        {
            $product = new Product();
            $product->setName('A Foo Bar');
            $product->setPrice('19.99');
            $product->setDescription('Lorem ipsum dolor');

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


        return $this->redirect("/show/{$product->getId()}");
        }

现在此操作仅保存相同的静态值,但我希望它能够从上面的表单中访问数据。我的问题很容易(我希望)。如何保存以前发送的信息,即如何在createAction中获取POST参数?

3 个答案:

答案 0 :(得分:2)

无需两个动作,您可以在同一个动作中添加此动作newAction

public function newAction()
        {   
            $product = new Product();
            $form = $this->createForm(new ProductType(), $product);
            $em = $this->getDoctrine()->getManager();

        $request =  $this->getRequest();

        if($request->getMethod() == 'POST'){
            $form->bindRequest($request);/*or  $form->handleRequest($request); depends on symfony version */
            if ($form->isValid()) {
              $em->persist($product);
            $em->flush();
       return $this->redirect($this->generateUrl('some_route'),array(params));
           }
       }
  return $this->render('AcmeStoreBundle:Default:new.html.twig', array(
                            'form' => $form->createView()
                        ));
}

答案 1 :(得分:1)

可以帮助你的东西:

http://www.leaseweblabs.com/2013/04/symfony2-crud-generator/

非常有用的短视频,解释了如何使用CRUD生成器命令行。然后,如果您使用默认情况下在Symfony2中的CRUD生成器,您将自行创建newAction操作,并且您将能够读取生成的代码(使用symfony版本的最佳实践代码)并尝试理解它。 / p>

答案 2 :(得分:0)

如果我理解你:

// ...
use Symfony\Component\HttpFoundation\Request;
// ...

public function createAction(Request $request)
{
    $product = new Product();
    $form = $this->createForm(new ProductType(), $product);

    $form->handleRequest($request);

    if($form->isValid())
    {
        $em = $this->getDoctrine()->getManager();
        $em->persist($product);
        $em->flush();

        return $this->redirect("/show/{$product->getId()}");
    }


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

这是link到doc页面。 如果您需要直接获取一些请求参数,则可以$request->request->get('your_parameter_name');使用POST$request->query->get('your_parameter_name');使用GET

您还可以获取以下表单数据:$form->get('your_parameter_name')->getData();

顺便说一句,如上所述,您不需要两个动作。