Symfony2 - Daten von der Datenbank und anzeigen in Formularen
Möchte ich die Daten auf meine Formulare, aber ich bin nicht in der Lage, dies zu tun.
Hier ist meine profile.php unter userbundle:
<?php
namespace project\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Profile
*
* @ORM\Table(name="project_profiles")
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class Profile
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \project\UserBundle\Entity\User
*
* @ORM\OneToOne(targetEntity="\project\UserBundle\Entity\User", inversedBy="profile")
*/
private $user;
/**
* @var string
*
* @ORM\Column(name="first_name", type="string")
*/
private $firstName;
/**
* @var string
*
* @ORM\Column(name="last_name", type="string")
*/
private $lastName;
/**
* @var string
*
* @ORM\Column(name="address1", type="string")
*/
private $address1;
/**
* @var string
*
* @ORM\Column(name="address2", type="string")
*/
private $address2;
/**
* @var string
*
* @ORM\Column(name="city", type="string")
*/
private $city;
/**
* @var string
*
* @ORM\Column(name="state", type="string")
*/
private $state;
/**
* @var string
*
* @ORM\Column(name="zipcode", type="string")
*/
private $zipcode;
/**
* @var string
*
* @ORM\Column(name="country", type="string")
*/
private $country;
/**
* @var integer
*
* @ORM\Column(name="client_api_delay", type="integer")
*/
private $clientApiDelay;
/**
* @var \DateTime
*
* @ORM\Column(name="created_at", type="datetime")
*/
private $createdAt;
/**
* @var \DateTime
*
* @ORM\Column(name="updated_at", type="datetime", nullable=true)
*/
private $updatedAt;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set firstName
*
* @param string $firstName
* @return Profile
*/
public function setFirstName($firstName)
{
$this->firstName = $firstName;
return $this;
}
/**
* Get firstName
*
* @return string
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* Set lastName
*
* @param string $lastName
* @return Profile
*/
public function setLastName($lastName)
{
$this->lastName = $lastName;
return $this;
}
/**
* Get lastName
*
* @return string
*/
public function getLastName()
{
return $this->lastName;
}
/**
* Set address1
*
* @param string $address1
* @return Profile
*/
public function setAddress1($address1)
{
$this->address1 = $address1;
return $this;
}
/**
* Get address1
*
* @return string
*/
public function getAddress1()
{
return $this->address1;
}
/**
* Set address2
*
* @param string $address2
* @return Profile
*/
public function setAddress2($address2)
{
$this->address2 = $address2;
return $this;
}
/**
* Get address2
*
* @return string
*/
public function getAddress2()
{
return $this->address2;
}
/**
* Set city
*
* @param string $city
* @return Profile
*/
public function setCity($city)
{
$this->city = $city;
return $this;
}
/**
* Get city
*
* @return string
*/
public function getCity()
{
return $this->city;
}
/**
* Set state
*
* @param string $state
* @return Profile
*/
public function setState($state)
{
$this->state = $state;
return $this;
}
/**
* Get state
*
* @return string
*/
public function getState()
{
return $this->state;
}
/**
* Set zipcode
*
* @param string $zipcode
* @return Profile
*/
public function setZipcode($zipcode)
{
$this->zipcode = $zipcode;
return $this;
}
/**
* Get zipcode
*
* @return string
*/
public function getZipcode()
{
return $this->zipcode;
}
/**
* Set country
*
* @param string $country
* @return Profile
*/
public function setCountry($country)
{
$this->country = $country;
return $this;
}
/**
* Get country
*
* @return string
*/
public function getCountry()
{
return $this->country;
}
/**
* Set clientApiDelay
*
* @param integer $clientApiDelay
* @return Profile
*/
public function setClientApiDelay($clientApiDelay)
{
$this->clientApiDelay = $clientApiDelay;
return $this;
}
/**
* Get clientApiDelay
*
* @return integer
*/
public function getClientApiDelay()
{
return $this->clientApiDelay;
}
/**
* Set createdAt
*
* @param \DateTime $createdAt
* @return Profile
*/
public function setCreatedAt($createdAt)
{
$this->createdAt = $createdAt;
return $this;
}
/**
* Get createdAt
*
* @return \DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* Set createdAt to NOW
*
* @return Profile
* @ORM\PrePersist
*/
public function setCreatedAtNow()
{
$this->createdAt = new \DateTime();
return $this;
}
/**
* Set updatedAt
*
* @param \DateTime $updatedAt
* @return Profile
*/
public function setUpdatedAt($updatedAt)
{
$this->updatedAt = $updatedAt;
return $this;
}
/**
* Get updatedAt
*
* @return \DateTime
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
/**
* Set updatedAt to NOW
*
* @return Profile
* @ORM\PreUpdate
*/
public function setUpdatedAtNow()
{
$this->updatedAt = new \DateTime();
return $this;
}
/**
* Set user
*
* @param \project\UserBundle\Entity\User $user
* @return Profile
*/
public function setUser(\project\UserBundle\Entity\User $user = null)
{
$this->user = $user;
return $this;
}
/**
* Get user
*
* @return \project\UserBundle\Entity\User
*/
public function getUser()
{
return $this->user;
}
}
Meine ProfileController.php Datei:
<?php
namespace project\UserBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use project\UserBundle\Entity\Profile;
use project\UserBundle\Form\ProfileType;
/**
* Profile controller.
*
* @Route("/admin/profile")
*/
class ProfileController extends Controller
{
/**
* Lists all Profile entities.
*
* @Route("/", name="admin_profile")
* @Method("GET")
* @Template()
*/
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('projectUserBundle:Profile')->findAll();
return array(
'entities' => $entities,
);
}
/**
* Creates a new Profile entity.
*
* @Route("/", name="admin_profile_create")
* @Method("POST")
* @Template("projectUserBundle:Profile:new.html.twig")
*/
public function createAction(Request $request)
{
$entity = new Profile();
$form = $this->createForm(new ProfileType(), $entity);
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('admin_profile_show', array('id' => $entity->getId())));
}
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
/**
* Displays a form to create a new Profile entity.
*
* @Route("/new", name="admin_profile_new")
* @Method("GET")
* @Template()
*/
public function newAction()
{
$entity = new Profile();
$form = $this->createForm(new ProfileType(), $entity);
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
/**
* Finds and displays a Profile entity.
*
* @Route("/{id}", name="admin_profile_show")
* @Method("GET")
* @Template()
*/
public function showAction($id)
{
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('projectUserBundle:Profile')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Profile entity.');
}
$deleteForm = $this->createDeleteForm($id);
return array(
'entity' => $entity,
'delete_form' => $deleteForm->createView(),
);
}
/**
* Displays a form to edit an existing Profile entity.
*
* @Route("/{id}/edit", name="admin_profile_edit")
* @Method("GET")
* @Template()
*/
public function editAction($id)
{
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('projectUserBundle:Profile')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Profile entity.');
}
$editForm = $this->createForm(new ProfileType(), $entity);
$deleteForm = $this->createDeleteForm($id);
return array(
'entity' => $entity,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
);
}
/**
* Edits an existing Profile entity.
*
* @Route("/{id}", name="admin_profile_update")
* @Method("PUT")
* @Template("projectUserBundle:Profile:edit.html.twig")
*/
public function updateAction(Request $request, $id)
{
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('projectUserBundle:Profile')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Profile entity.');
}
$deleteForm = $this->createDeleteForm($id);
$editForm = $this->createForm(new ProfileType(), $entity);
$editForm->bind($request);
if ($editForm->isValid()) {
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('admin_profile_edit', array('id' => $id)));
}
return array(
'entity' => $entity,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
);
}
/**
* Deletes a Profile entity.
*
* @Route("/{id}", name="admin_profile_delete")
* @Method("DELETE")
*/
public function deleteAction(Request $request, $id)
{
$form = $this->createDeleteForm($id);
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('projectUserBundle:Profile')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Profile entity.');
}
$em->remove($entity);
$em->flush();
}
return $this->redirect($this->generateUrl('admin_profile'));
}
/**
* Creates a form to delete a Profile entity by id.
*
* @param mixed $id The entity id
*
* @return Symfony\Component\Form\Form The form
*/
private function createDeleteForm($id)
{
return $this->createFormBuilder(array('id' => $id))
->add('id', 'hidden')
->getForm()
;
}
}
Ich habe erklärt mein Unternehmen unter Resources/Profile/show.html und alles funktioniert:
Zum Beispiel für die Adresse ich habe:
<th>Address2</th>
<td>{{ entity.address2 }}</td>
Mein problem ist ich habe ein anderes bundle genannt ShowBundle und ich will mich zeigen diese Elemente auf, dass bunddle. Für e.g Wenn ich rufe {{ entity.Adresse2 }} auf das bundle zu zeigen, dass meine Adresse, die er mir zeigt, dass: (variable "Person" nicht vorhanden ist)
Wie kann ich diese anzeigen Profil Personen auf dem Zweig bildet, die in einem anderen bundle, in meinem Fall ShowBundle?
Vielen Dank
- Für die user, ich bin ale, um zu zeigen, durch Verwendung von {{ app.Benutzer.variablename }} obwohl ich in einem anderen bundle. Wie kann ich das machen, das zeigen die Entitäten, die ich oben aufgeführt sind, die sind unter meinem Profil?
- Ich würde vorschlagen, folgenden code in Ihre
ProfileController
unter dershowAction
. Sollte dies funktionieren. - Dank antony. Ich habe versucht, nach deiner Anregung habe ich aber eine andere Fehlermeldung jetzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Natürlich können Sie
{{ app.user.variablename }}
das ist eine Globale. Aber für die andere variable, eine Ansicht kann nur die Daten anzeigen, die den controller senden, um es. Das ist das MVC (Model-View-Controller) Architektur.Variable
entity
existieren in den Zweig nur anzeigen, wenn Sie Ihren controller senden es an die view. Das ist es, was die Zeilenreturn array( 'entities' => $entities );
tun, die auf Ihrem ProfileController.php und das ist, warum Sie können es verwenden, Resources/Profile/show.html.Anzeigen wollen Sie ein Unternehmen in einem anderen bundle, ziehen Sie es einfach aus der Datenbank und senden Sie es an die Ansicht auf die gleiche Weise tun, in Ihren ProfileController.php. Wenn Sie selbst den code, den Sie geschrieben, das sollte eine einfache Aufgabe.
Wenn Sie nicht verstehen, den code, den Sie geschrieben, ich schlage vor, Sie lernen, Symfony. Sie können Lesen das Buch, die eine ausgezeichnete Schritt-für-Schritt-Dokumentation.
Tipps :
copy-Vergangenheit dieser code in deinem anderen Controller bundle (das Verfahren endet mit
Action()
) :Werden Sie Zugang zu Ihren Profilen durch
{{ profiles }}
in Ihre Vorlagen.findAll();
das bedeutet, dass Sie eine Reihe von Profilen, die nicht ein Profil. (Deswegen schrieb ich es in plural =P), So müssen Sieforeach
auf profile Profil eins nach dem anderen, oder um festzulegen, welches Profil der array, das Sie wollen :profiles[0].address1
zu Holen Sie sich die Adresse von erstes Profil undprofile[1].address1
zu Holen Sie sich die Adresse von zweite Profil.array
die vorhanden sind, wenn fast alle Programmiersprachen, und Sie werden verstehen, Ihre Fehlermeldungen, die ganz klar für jemanden, der weiß, wie man programmiert.