【发布时间】:2016-12-20 09:02:17
【问题描述】:
我的 Symfony2 网络应用程序中有一个用于管理商店的表单。我希望能够使用此表单创建和编辑我的商店。 我的问题是我的商店实体有一个地址,这是我需要在创建商店的同时创建的另一个实体。
店铺实体的组成如下:
<?php
//src/appBundle/Entity/Shop
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Shop
*
* @ORM\Table(name="app_shop")
* @ORM\Entity(repositoryClass="AppBundle\Repository\ShopRepository")
*/
class Shop
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @ORM\Column(name="shopName", type="string", length=255)
*/
private $shopName;
/**
* @var string
* @ORM\Column(name="description", type="text", nullable=true)
*/
private $description;
/**
* @var string
* @ORM\Column(name="ownerName", type="string", length=255)
*/
private $ownerName;
/**
* @ORM\ManyToOne(targetEntity="UserBundle\Entity\Seller", cascade={"refresh"}, fetch="EAGER")
* @ORM\JoinColumn(nullable=false, onDelete="NO ACTION")
* @Assert\Valid()
*/
private $owner;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Address", cascade={"refresh"}, fetch="EAGER")
* @ORM\JoinColumn(nullable=true, onDelete="NO ACTION")
* @Assert\Valid()
*/
private $address;
//..getters&setters
}
一家商店有一个Adress,每次我在此表单中时都需要创建或编辑此地址实体。我的地址实体是这样组成的:
//src/appBundle/Entity/Address
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Adress
*
* @ORM\Table(name="app_address")
* @ORM\Entity(repositoryClass="AppBundle\Repository\AddressRepository")
*/
class Address
{
/**
* @var int
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @ORM\Column(name="street", type="string", length=255)
*
*/
private $street;
/**
* @ORM\Column(type="string", length=5)
*/
private $postalCode;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $city;
/**
* @var string
* @ORM\Column(name="country", type="string", length=255)
*/
private $country;
//..getters&setters
public function __toString() {
return $this->street." ".$this->getPostalCode()." ".$this->getCity();
}
}
我在注册过程中创建了一个表单来管理商店。我的问题是 我无法像我的商店实体那样显示地址字段。我只有一个选择列表,其中显示了我的数据库中已经存在的地址。
<?php
namespace UserBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use AppBundle\Entity\Address;
class ShopType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('shopName', TextType::class, array('label' => 'Nom du magasin*', 'required' => true, 'error_bubbling' => true))
->add('ownerName', TextType::class, array('label' => 'Nom du gérant*', 'required' => true, 'error_bubbling' => true))
->add('address', EntityType::class , array('class' => 'AppBundle:Address'))
;
}
}
在我的控制器中,我将我的表单实例化如下:
$shop = $em->getRepository('AppBundle:Shop')->findOneByOwner($user);
if ($shop == null){
$shop = new Shop();
}
$form = $this->createForm(ShopType::class , $shop);
在此示例中,我有一个包含现有地址的选择列表,如下所示:
【问题讨论】: