Ich möchte eine Seite erstellen, in der es mehrere Beiträge gibt (auf der gleichen Seite) und jeder Beitrag hat ein Formular und Eingabe in diesem Formular in dieser Eingabe können Sie etwas über diesen Beitrag schreiben, dann Text und Post-ID wird an die Datenbank gesendet. Wie kann ich das mit symfony machen?Symfony mehrere Formen und Eingaben
-1
A
Antwort
0
Es ist eigentlich sehr einfach. Machen Sie Ihre Entitäten und den Formtyp so, wie Sie auch verwendet werden. Der Trick ist, die Post-ID in die Aktion URL der Formulare einzufügen, so dass es
<form action="/reaction/new/1">
macht, wo die 1 die Post-ID ist. I verwendet, um den Zweig-Controller-Funktion jeder Form mit der richtigen Aktion URL zu machen:
{{ render(controller('AppBundle:Reaction:new', {'postId':post.id})) }}
Beispiel
Beitrag Einheit:
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Post
*
* @ORM\Table(name="post")
* @ORM\Entity(repositoryClass="AppBundle\Repository\PostRepository")
*/
class Post
{
// ...
/**
* @ORM\OneToMany(targetEntity="Reaction", mappedBy="post")
*/
private $reactions;
public function __construct()
{
$this->reactions = new ArrayCollection();
}
// ...
}
Reaction Enity:
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Reaction
*
* @ORM\Table(name="reaction")
* @ORM\Entity(repositoryClass="AppBundle\Repository\ReactionRepository")
*/
class Reaction
{
// ...
/**
* @ORM\ManyToOne(targetEntity="Post", inversedBy="reactions")
* @ORM\JoinColumn(name="post_id", referencedColumnName="id")
*/
private $post;
// ...
}
Post-Controller:
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
/**
* Post controller.
*
* @Route("post")
*/
class PostController extends Controller
{
/**
* @Route("/", name="post_index")
*/
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$posts = $em->getRepository('AppBundle:Post')->findAll();
return $this->render('post/index.html.twig', array(
'posts' => $posts,
));
}
}
Reaktionsregler:
namespace AppBundle\Controller;
use AppBundle\Entity\Reaction;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;use Symfony\Component\HttpFoundation\Request;
/**
* Reaction controller.
*
* @Route("reaction")
*/
class ReactionController extends Controller
{
/**
* Creates a new reaction entity.
*
* @Route("/new/{postId}", name="reaction_new")
* @Method({"GET", "POST"})
*/
public function newAction(Request $request, $postId)
{
$em = $this->getDoctrine()->getManager();
$reaction = new Reaction();
$form = $this->createForm('AppBundle\Form\ReactionType', $reaction, array(
/*
* You must change the action otherwise we will post to Post:index action !
*/
'action' => $this->generateUrl('reaction_new', array('postId' => $postId))
));
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
/*
* load post entity and add it to the reaction::post collection !
*/
$post = $em->getRepository('AppBundle:Post')->find($postId);
$reaction->setPost($post);
$em->persist($reaction);
$em->flush($reaction);
/*
* return to the post page
*/
return $this->redirectToRoute('post_index');
}
return $this->render('reaction/new.html.twig', array(
'form' => $form->createView(),
));
}
}
post/index.html.twig:
{% extends 'base.html.twig' %}
{% block body %}
{% for post in posts %}
<h1>{{ post.title }}</h1>
<p>{{ post.body }}</p>
<h3>Reactions</h3>
<ul>
{% for reaction in post.reactions %}
<li>{{ reaction.message }}</li>
{% endfor %}
</ul>
{{ render(controller('AppBundle:Reaction:new', {'postId':post.id})) }}
{% endfor %}
{% endblock %}
Reaktions/new.html.twig:
{{ form_start(form) }}
{{ form_widget(form) }}
<input type="submit" value="Send" />
{{ form_end(form) }}
Verwandte Themen
- 1. Mehrere Formen von gleicher Art - Symfony 2
- 2. Symfony Formen überschreiben Feld Aussehen
- 3. mehrere Eingaben in Python
- 4. Mehrere Eingaben für Netcat
- 5. django mehrere dynamische Formen
- 6. Mehrere Formen in MVC3
- 7. D3 - Zeichnung mehrere Formen
- 8. Mehrere AVCaptureSessions ausführen oder mehrere Eingaben hinzufügen
- 9. Ruby: Eingabeaufforderung für mehrere Eingaben
- 10. SQL-Abfrage über mehrere Eingaben
- 11. jQuery: Mehrere Eingaben gleichzeitig verhindern
- 12. mehrere Eingaben auf Logstash jdbc
- 13. Suchformular php/sql mehrere Eingaben
- 14. Makefile, Regel für mehrere Eingaben
- 15. Mehrere Formen in ASP.NET MVC
- 16. Django mehrere verwandte Formen Datenverarbeitungsfehler
- 17. Symfony imitieren einen Benutzer und mehrere Firewall
- 18. Symfony Mehrere Datenbanken
- 19. Symfony 2 - mehrere Formulare
- 20. Symfony Propel mehrere Datenbankfehler
- 21. Schienen Beziehung und Formen
- 22. Mehrere Eingaben erhalten und in sqlite Tabelle einfügen
- 23. Hadoop - Wie verwenden und reduzieren Sie mehrere Eingaben?
- 24. Wie benutzt man 2 Formen in 1 Zweig in Symfony?
- 25. Symfony 2 Formen, Einbettung Sammlung in eingebetteten Sammlung
- 26. wie ein Formularfeld in eingebetteten Formen von symfony 2-Controller
- 27. WIE MEHRERE FORMEN (DRAG UND DROP) IN JAVA FX WÄHLEN?
- 28. jQuery mehrere Arten von textbasierten Eingaben auswählen
- 29. TFS 2015 Plugin - mehrere Aufgaben Eingaben
- 30. Wie mehrere Eingaben an Jsp übergeben werden
Diese Art von Fragen normalerweise gelöscht oder geschlossen als zu weit oder off-topic (wenn Sie einen kostenlosen Programmierservice oder für ein Tutorial suchen). Sie können die Dokumentation nur lesen, um zu erfahren, wie Symfony funktioniert, dann haben Sie das Grundwissen, um Code zu schreiben und hier zurückzukehren, um Hilfe für ein bestimmtes Problem in Bezug auf Ihren Code zu erhalten. Lesen Sie auch: [Welche Themen können Sie auf SO stellen] (http://stackoverflow.com/help/on-topic) und [Wie stelle ich eine gute Frage?] (Http://stackoverflow.com/help/how (zu fragen), diese Themen werden Ihnen helfen, eine bessere Frage zu formulieren. –