0
私はSymfony 2.8でプロジェクトを開発しています。また、フォームクラスを使いたいと思います。しかし、私はまだできませんでした。Symfony 2.8でリレーショナルモデルに従ってフォームクラスを生成する方法は?
このカテゴリのエンティティである:
<?php
namespace ApiBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Category
*
* @ORM\Table(name="category")
* @ORM\Entity(repositoryClass="ApiBundle\Repository\CategoryRepository")
*/
class Category
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="image", type="string")
*/
private $image;
/**
* @var CategoryTranslation
* @ORM\OneToMany(targetEntity="CategoryTranslation", mappedBy="category", fetch="EAGER")
*/
private $translations;
/**
* @var Recipe
* @ORM\OneToMany(targetEntity="Recipe", mappedBy="category")
*/
private $recipes;
/**
* @var \DateTime
*
* @ORM\Column(name="created", type="datetime")
*/
private $created;
public function __construct()
{
$this->translations = new ArrayCollection();
$this->recipes = new ArrayCollection();
$this->created = new \DateTime();
}
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @return string
*/
public function getImage()
{
return $this->image;
}
/**
* @param string $image
* @return Category
*/
public function setName($image)
{
$this->image = $image;
return $this;
}
/**
* @return CategoryTranslation
*/
public function getTranslations()
{
return $this->translations;
}
/**
* @param CategoryTranslation $translations
* @return Category
*/
public function setTranslations($translations)
{
$this->translations = $translations;
return $this;
}
/**
* @return Recipe
*/
public function getRecipes()
{
return $this->recipes;
}
/**
* @param Recipe $recipes
* @return Category
*/
public function setRecipes($recipes)
{
$this->recipes = $recipes;
return $this;
}
/**
* @return \DateTime
*/
public function getCreated()
{
return $this->created;
}
}
このカテゴリ翻訳エンティティです:
<?php
namespace ApiBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* CategoryTranslation
*
* @ORM\Table(name="category_translation")
* @ORM\Entity(repositoryClass="ApiBundle\Repository\CategoryTranslationRepository")
*/
class CategoryTranslation
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Language", inversedBy="CategoryTranslation")
* @ORM\JoinColumn(name="language_id", referencedColumnName="id")
*/
private $language;
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="CategoryTranslation")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
private $category;
/**
* @var string
*
* @ORM\Column(name="name", type="string")
*/
private $name;
/**
* @var \DateTime
*
* @ORM\Column(name="created", type="datetime")
*/
private $created;
public function __construct()
{
$this->created = new \DateTime();
}
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @return mixed
*/
public function getLanguage()
{
return $this->language;
}
/**
* @param mixed $language
* @return CategoryTranslation
*/
public function setLanguage($language)
{
$this->language = $language;
return $this;
}
/**
* @return mixed
*/
public function getCategory()
{
return $this->category;
}
/**
* @param mixed $category
* @return CategoryTranslation
*/
public function setCategory($category)
{
$this->category = $category;
return $this;
}
/**
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* @param string $name
* @return CategoryTranslation
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* @return \DateTime
*/
public function getCreated()
{
return $this->created;
}
}
これは、カテゴリーフォームクラスである:
<?php
namespace ApiBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class CategoryType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('image')
->add('translations', CollectionType::class, [
'type' => CategoryTranslationType::class,
'allow_add' => true,
'allow_delete' => true,
'prototype' => true,
'by_reference' => false
])
->add('save',SubmitType::class);
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'ApiBundle\Entity\Category'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'apibundle_category';
}
}
これは、私は、フォームを追加したコントローラである:ここでは
public function addAction()
{
$category = new Category();
$trans = new CategoryTranslation();
$category->getTranslations()->add($trans);
$form = $this->createForm(CategoryType::class, $category)->createView();
return $this->render('PanelCategoryBundle:Default:add.html.twig', [
'form' => $form
]);
}
は、フォームのスクリーンショットです:
私はこのフォームビルダーは、言語の数に応じて、翻訳の入力を作成したいですデータベース上で。
カテゴリを追加しているときに複数の翻訳を選択できるようにしたいですか? –
言語の数に応じて入力を確認したいと思います。また、私は自動的にしたい。@ MuzafarAli –