我的 Symfony2网络应用程序是用于管理商店的表单。我希望能够使用此表单创建和编辑我的商店。 我的问题是我的Shop实体有一个Adress,这是我在创建商店的同时需要创建的另一个实体。
商店实体的组成如下:
<?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);
在这个例子中,我有一个包含现有地址的选择列表,如下所示:
答案 0 :(得分:1)
您希望在商店表单中嵌入地址表单,因此您需要为Address实体创建表单,然后您将在ShopType中添加AddressType,如下所述: http://symfony.com/doc/current/form/embedded.html
如果您使用EntityType,您将从数据库中选择要链接的实体(例如,如果郊区/国家/地区是一个单独的实体,请考虑在地址中设置郊区/国家/地区。)