PHP-Symfony2-从数据库中提取数据并以表格形式显示
作者:互联网
我想在表单上显示数据,但我不能这样做.
这是我在userbundle下的profile.php:
<?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;
}
}
我的ProfileController.php文件:
<?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()
;
}
}
我已经在Resources / Profile / show.html下声明了我的实体,并且一切正常:
例如我的地址有:
<th>Address2</th>
<td>{{ entity.address2 }}</td>
我的问题是我还有一个名为ShowBundle的捆绑包,我想在那个捆绑包上显示那些实体.例如,当我在该捆绑包上致电{{entity.address2}}以显示我的地址时,它表明:(变量“实体”不存在)
如何在另一个捆绑包(例如ShowBundle)的树枝窗体中显示这些配置文件实体?
非常感谢
解决方法:
当然,您可以使用全局的{{app.user.variablename}}.但是对于其他变量,视图只能显示控制器发送给它的数据.那就是MVC(模型-视图-控制器)架构.
仅当控制器将变量实体发送到视图时,变量实体才存在于Twig视图中.这就是行返回array(‘entities’=> $entities);的内容.在ProfileController.php上执行此操作,这就是为什么可以在Resources / Profile / show.html中使用它.
如果要显示另一个捆绑包中的实体,只需将其从数据库中拉出并将其发送到视图,就像在ProfileController.php中一样.如果您自己编写了发布的代码,那将是一件容易的事.
如果您不理解所发布的代码,建议您学习使用Symfony.您可以阅读the Book,这是出色的循序渐进文档.
提示 :
将此代码复制粘贴到其他捆绑控制器中(以Action()结尾的方法):
$em = $this->getDoctrine()->getManager(); //get the database manager
$profiles = $em->getRepository('projectUserBundle:Profile')->findAll(); // get the profiles
return array(
'profiles' => $profiles,
); // send data to the view
您将通过模板中的{{个人资料}}访问个人资料.
标签:symfony,twig,mysql,php 来源: https://codeday.me/bug/20191122/2058496.html