我正在尝试学习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参数?
答案 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();
。
顺便说一句,如上所述,您不需要两个动作。