gpt4 book ai didi

php - 如何在创建/更新 Symfony2 表单中管理链接实体

转载 作者:行者123 更新时间:2023-12-04 17:54:44 25 4
gpt4 key购买 nike

我的 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
}

一家商店有一个地址,我每次在这个表单中都需要创建或编辑这个地址实体。我的地址实体是这样组成的:

//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'))
;
}
}

在我的 Controller 中,我将我的表单实例化如下:

    $shop = $em->getRepository('AppBundle:Shop')->findOneByOwner($user);
if ($shop == null){
$shop = new Shop();
}
$form = $this->createForm(ShopType::class , $shop);

在这个例子中,我有一个包含现有地址的选择列表,如下所示:

enter image description here

最佳答案

您想在您的商店表单中嵌入一个地址表单,因此您需要为地址实体创建一个表单,然后您将在您的 ShopType 中添加一个地址类型,如下所述: http://symfony.com/doc/current/form/embedded.html

如果您使用 EntityType,您将从数据库中选择一个实体进行链接(例如,如果郊区/国家/地区是一个单独的实体,请考虑在您的地址中设置一个郊区/国家/地区)。

关于php - 如何在创建/更新 Symfony2 表单中管理链接实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41238332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com