Php 这是处理两页表格的正确方法吗?
我有一个Php 这是处理两页表格的正确方法吗?,php,forms,design-patterns,symfony,Php,Forms,Design Patterns,Symfony,我有一个索引页面,其中包含一个简单的表单;如果表单验证失败,则重新加载索引页面,如果没有,则与页面相关的操作将请求转发给与页面成功相关的另一个操作。success页面使用提交的表单从DB创建列表。一旦进入success页面,我们就有了另一个类似于第一个表单的表单,用户可以使用它修改页面上的列表。两个表单都有相同的字段 索引页操作: class DefaultController extends Controller { /** * @Route("/", name="homepage")
索引
页面,其中包含一个简单的表单;如果表单验证失败,则重新加载索引页面,如果没有,则与页面相关的操作将请求转发给与页面成功
相关的另一个操作。success
页面使用提交的表单从DB创建列表。一旦进入success
页面,我们就有了另一个类似于第一个表单的表单,用户可以使用它修改页面上的列表。两个表单都有相同的字段
- 索引页操作:
class DefaultController extends Controller { /** * @Route("/", name="homepage") */ public function indexAction(Request $request) { $event = new Event(); $form = $this->createForm(EventForm::class, $event); $form->handleRequest($request); if($form->isSubmitted() && $form->isValid()) { // Do some minor modification to the form data $event->setDate($party->getDate()->modify('+12 hours')); $cityName = strtolower($event->getPlace()['city']); // We know the form data is valid, forward it to the action which will use it to query DB return $this->forward('AppBundle:Frontend/Default:eventsList', array('request' => $request)); } // If validation fails, reload the index page with the errors return $this->render('default/frontend/index.html.twig', array('form' => $form->createView())); }
- 成功页面操作(转发表单数据的位置)
提交表单时,将使用相同的控制器和操作进行处理。您必须处理提交的数据,然后重定向到成功页面 在你的例子中:
if($form->isSubmitted()&&&$form->isValid()){
...
...
返回$this->redirectToRoute('eventList');
}
如果您需要将发布的数据从一个“页面”传输到另一个“页面”,则必须将其存储在会话$this->get('session')->set('name',val)中然后通过$this->get('session')->get('name')从eventList操作中的会话检索数据代码>
有关如何在Symfony中处理会话的详细信息:提交表单时,将使用相同的控制器和操作进行处理。您必须处理提交的数据,然后重定向到成功页面
在你的例子中:
if($form->isSubmitted()&&&$form->isValid()){
...
...
返回$this->redirectToRoute('eventList');
}
如果您需要将发布的数据从一个“页面”传输到另一个“页面”,则必须将其存储在会话$this->get('session')->set('name',val)中然后通过$this->get('session')->get('name')从eventList操作中的会话检索数据代码>
有关如何在Symfony中处理会话的详细信息:
/**
* @Route("/success", name="eventList")
*/
public function eventsListAction(Request $request) {
$event = new Party();
// Create a form in the second page and set its action to be the first page, otherwise form submition triggers the FIRST action related to page index and not the one related to page success
$form = $this->createForm(EventForm::class, $event, array('action' => $this->generateUrl('eventList')));
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$event->setPlace($form["place"]->getData());
$event->setTitle($form["title"]->getData());
$repository = $this->getDoctrine()
->getRepository('AppBundle:Event');
// ....
// Create a list of events using the data from DB
// ....
return $this->render('default/frontend/success.html.twig',
array('events' => $events, 'form' => $form->createView())
);
}
return $this->render('default/frontend/success.html.twig', array('form' => $form->createView()));
}