0 レビュー
1 回答
php-Symfony2の作成/更新フォームでリンクされたエンティティを管理する方法
Symfony2Webアプリケーションにショップの管理に使用するフォームがあります。このフォームを使用してショップを作成および編集できるようにしたいと思います。 私の問題は、ショップエンティティに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
があり、このフォームにアクセスするたびに、このAdressエンティティを作成または編集する必要があります。私の住所エンティティは次のように構成されています:
// src / appBundle / Entity / Address
<?php
名前空間AppBundle\Entity;
Doctrine \ ORM\MappingをORMとして使用します。
アサートとしてSymfony\Component \ Validator\Constraintsを使用します。
/ **
*{-コード-2}
*
* @ORM \ Table(name = "app_address")
* @ORM \ Entity(repositoryClass = "AppBundle \ Repository \ AddressRepository")
* /
クラスアドレス
{{
/ **
* @var int
* @ORM \ Column(name = "id"、type = "integer")
* @ORM \ Id
* @ORM \ GeneratedValue(strategy = "AUTO")
* /
プライベート$id;
/ **
*@var文字列
* @ORM \ Column(name = "street"、type = "string"、length = 255)
*
* /
プライベート$street;
/ **
* @ORM \ Column(type = "string"、length = 5)
* /
プライベート$postalCode;
/ **
* @ORM \ Column(type = "string"、length = 255、nullable = true)
* /
プライベート$city;
/ **
*@var文字列
* @ORM \ Column(name = "country"、type = "string"、length = 255)
* /
プライベート$country;
//..getters&setters
パブリック関数__toString(){
$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
レビュー
答え :
解決策:
ショップフォーム内に住所フォームを埋め込みたいので、Addressエンティティのフォームを作成してから、ShopTypeに次のようにAddressTypeを追加します。 http://symfony.com/doc/current/form/embedded.html
EntityTypeを使用する場合は、データベースからリンクするエンティティを選択します(たとえば、郊外/国が別のエンティティである場合は、住所に郊外/国を設定することを検討してください)。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。