this tutorialを実装しています。 Tag
エンティティがすでに存在する場合、私は新しいものを作成することを決定することができるように埋め込みフォームのコレクション:エンティティが存在するかどうかを確認
/**
* @ORM\Entity()
*/
class Tag
{
/**
* @var string
* @ORM\Column(name="name", type="string", length=63, unique=true)
*/
private $name;
/**
* @ORM\ManyToMany(targetEntity="Task", cascade={"persist"})
* @ORM\JoinTable(name="tasks_tags")
*/
protected $tasks;
}
がどのように私は、new
とedit
コントローラで、確認することができます。しかし、私の場合にはTag
エンティティは、ユニークなname
性質を持っています。 Tag
が存在する場合は、新しいタスクに追加することができます。
public function newAction(Request $request)
{
$task = new Task();
$form = $this->createForm(TaskType::class, $task);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$tags = $form->get('tags')->getData();
$em = $this->getDoctrine()->getManager();
foreach ($tags as $tagName) {
$tag = $this->getDoctrine()->getRepository('AppBundle:Tag')->findOneBy(array('name' => $tagName));
if (!$tag) {
$newTag = new Tag();
$newTag->setName($tagName);
$em->persist($newTag);
}
}
$em->persist($task);
$em->flush();
return $this->redirectToRoute('tasks_list');
}
}
私はこのエラーが後に提出しました:
Catchable Fatal Error: Object of class
AppBundle\Entity\Tag
could not be converted to string
私はTask
フォームが送信される前Tag
エンティティが永続化されるので、それはだと思います。
この部分はどのように扱うことができますか?
にある{{tag.name}}というタグを正確に '$ newTag-> setName($ tagName);という行に表示します; $ tagNameはオブジェクトを文字列に変換する' __toString() 'を探しています、それは存在しないので、...良いキャッチ – sakhunzai