Symfony2 form refresh gleichen Seite nach dem submit
Ich habe ein Formular, dessen Inhalt wird aus einer DB.
in meinem controller habe ich:
/**
* @Route("/HR/manage/{projectID}", name="hr_manage")
*/
public function manageHRAction(Request $request, $projectID)
{
//here I get all the data from DB and create the form
if ($form->isValid())
{
//here I do all the relevant changes in the DB
return $this->render('HR/show.html.twig', array('hrlist' => $HRsInMyDomain, 'form' => $form->createView(), 'HRs' => $HRsInThisProject, 'project' => $prj, ));
}
return $this->render('HR/show.html.twig', array('hrlist' => $HRsInMyDomain, 'form' => $form->createView(), 'HRs' => $HRsInThisProject, 'project' => $prj, ));
}
Aktualisiert es die info auf der DB richtig, aber es baut nicht wieder das Formular mit den aktualisierten Daten. Statt der Rückkehr in das "isValid()" ich brauche einfach einen refresh der aktuellen Seite.
Ich vermute, es ist möglich und einfach zu bewerkstelligen, aber ich konnte nicht herausfinden, wie es zu tun :/
BEARBEITEN - hier kommt mehr relevanten code:
/**
* @Route("/HR/manage/{projectID}", name="hr_manage")
*/
public function manageHRAction(Request $request, $projectID)
{
$user = $this->container->get('security.context')->getToken()->getUser(); //get current user
$em = $this->getDoctrine()->getManager(); //connect to DB
$prj = $this->getDoctrine()->getRepository('AppBundle:Project')->findOneById($projectID);
[...]
//here comes some code to generate the list of $HRsInThisProject and the list of roles ($rolesListForForm)
[...]
foreach ($HRsInThisProject as $key => $HR)
{
$form->add('roleOf_'.$key, 'choice', array('choices' => $rolesListForForm, 'required' => true, 'data' => $HR['role'], 'label' => false, ));
$form->add('isActive_'.$key, 'choice', array('choices' => [0 => 'Inactive', 1 => 'Active'] , 'required' => true, 'data' => $HR['is_active'], 'label' => false, ));
}
[...]
//here there is some code to get the $HRsInMyDomainForForm
[...]
$form->add('HRid', 'choice', array('choices' => $HRsInMyDomainForForm,'required' => false, 'placeholder' => 'Choose a resource', 'label' => false, ));
$form->add('role', 'choice', array('choices' => $rolesListForForm,'required' => false, 'placeholder' => 'Choose a role', 'label' => false, ));
$form->add('save', 'submit', array('label' => 'Save'));
$form->handleRequest($request);
if ($form->isValid())
{
{
[...] here there is a huge portion of code that determines if I need to generate a new "event" to be stored, or even multiple events as I can change several form fields at once
//If I needed to create the event I persist it (this is inside a foreach)
$em->persist($newHREvent);
}
$em->flush();
return $this->render('HR/show.html.twig', array('projectID' => $prj->getId(), 'hrlist' => $HRsInMyDomain, 'form' => $form->createView(), 'HRs' => $HRsInThisProject, 'project' => $prj, ));
}
return $this->render('HR/show.html.twig', array('projectID' => $prj->getId(), 'hrlist' => $HRsInMyDomain, 'form' => $form->createView(), 'HRs' => $HRsInThisProject, 'project' => $prj, ));
}
Außerdem habe ich einen screenshot des Formulars:
Wenn ein Benutzer zum hinzufügen einer neuen Ressource, die ich brauche, um zu bestehen, es an die DB (und das ist richtig gemacht), aber dann muss ich sehen, es in der Liste der verfügbaren Stunden, ohne die Notwendigkeit für den Benutzer, um die Seite neu laden.
Sie finden Sie in den aktualisierten Frage
InformationsquelleAutor Sergio Negri | 2014-12-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dynamischer Weg wäre:
oder einfach
return $this->redirect($request->getUri());
Das behebt mein problem. Aber kann mir bitte jemand darauf hinweisen genau das, warum passiert das?
InformationsquelleAutor Aistis
Habe ich es geschafft, es zu lösen, in eine einfache (und ich hoffe richtigen) Weg.
Habe ich einfach ersetzt die "render" - innerhalb der isValid() mit der folgenden:
Ich arbeiten, aber hat jemand vorhersehen Probleme mit dieser Lösung?
InformationsquelleAutor Sergio Negri
Haben Sie verknüpfen das Formular, um die Anfrage.
nur nach, dass Sie test $Formular->isValid() und übergeben Sie diese form, die beim Rendern der Vorlage. Wenn Sie bereits Tat dies, und nicht enthalten in den obigen code bitte zeig mehr code für eine bessere Hilfe.
InformationsquelleAutor Nelson Teixeira
Hier ist der richtige Weg, es zu tun. Ereignis, obwohl Sie
$projectId
slug, inAction
können Sie ganzObject
, in diesem FallProject
. Symfony kümmert sich für den rest (laden RechtProject
Person für Sie.Update
Entsprechend zu Bearbeiten, müssen Sie die Verwendung von javascript für die clientseitige dom-manipulation. Prüfen Sie diesen link aus Symfony offiziellen Dokument eingebettete Formulare. Hier findest du ein Beispiel von dem, was Sie versuchen zu erreichen.
Es scheint ein wenig verworren und vermutlich ein overkill. Alles was ich brauche, ist ein refresh :/
Sie sagte, dass Sie nicht wollen, um die Seite zu aktualisieren.
Wahrscheinlich habe ich missverstanden worden, in meinem ersten post schrieb ich "ich brauche einfach eine Aktualisierung auf die aktuelle Seite" und unten in einem der Kommentare, die ich schrieb: "...ohne die Notwendigkeit für den Benutzer, um die Seite neu laden". Ich meinte, dass ich brauche ein refresh, aber ich will nicht den Benutzer führen Sie es manuell aus.
Noch können Sie den code, den ich gepostet habe, um zu erreichen, was Sie wollen.
InformationsquelleAutor Lord Zed