Symfony让这一切变得如此简单。它列出了你的项目的大线,没有任何问题。直到出现问题。您将在几天内寻找合适的解决方案。至少那就是我现在正在做的事情。
我正在开发一个小测试项目,您可以在其中添加网址作为书签,并为每个网址提供各种标记以对网址进行分类。
我使用generate:doctrine:crud
命令来构建表单。但我得到了一个奇怪的错误。
An exception has been thrown during the rendering of a template ("Catchable Fatal Error: Object of class Bla\LinkBundle\Entity\Url could not be converted to string") in form_div_layout.html.twig at line 13.
我可以通过在我的Url实体中添加__toString()
方法来解决此问题,但我想知道原因。
问题在于name
属性为null
。如果我将此值作为''使用__toString()
返回,则可以正常工作。但我不喜欢这个解决方案。当我处于“创建网址”表单时,所有其他值都是null
,那么为什么抱怨name
属性?
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('url')
->add('flags')
->add('tags', EntityType::class, array(
'class' => 'Bla\LinkBundle\Entity\Tag',
'choice_label' => 'name',
'multiple' => true,
))
;
}
public function newAction(Request $request)
{
$url = new Url();
$form = $this->createForm('Bla\LinkBundle\Form\UrlType', $url);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($url);
$em->flush();
return $this->redirectToRoute('url_show', array('id' => $url->getId()));
}
return $this->render('url/new.html.twig', array(
'url' => $url,
'form' => $form->createView(),
));
}
namespace Bla\LinkBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Bla\LinkBundle\Entity\Tag;
/**
* URL
*
* @ORM\Table(name="urls")
* @ORM\Entity
*/
class Url
{
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255, nullable=false)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="url", type="text", length=65535, nullable=false)
*/
private $url;
/**
* @var integer
*
* @ORM\Column(name="flags", type="integer", nullable=false)
*/
private $flags;
/**
* @var integer
*
* @ORM\Column(name="id", type="bigint")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="\Bla\LinkBundle\Entity\Tag", cascade={"persist"})
* @ORM\JoinTable(name="url_tag",
* joinColumns={@ORM\JoinColumn(name="url_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id", unique=true)}
* )
*/
protected $tags;
public function __construct()
{
$this->tags = new ArrayCollection();
}
/**
* Set name
*
* @param string $name
*
* @return Urls
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set url
*
* @param string $url
*
* @return Urls
*/
public function setUrl($url)
{
$this->url = $url;
return $this;
}
/**
* Get url
*
* @return string
*/
public function getUrl()
{
return $this->url;
}
/**
* Set flags
*
* @param integer $flags
*
* @return Urls
*/
public function setFlags($flags)
{
$this->flags = $flags;
return $this;
}
/**
* Get flags
*
* @return integer
*/
public function getFlags()
{
return $this->flags;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @param \Doctrine\Common\Collections\ArrayCollection $tags
* @return Urls
*/
public function setTags($tags)
{
$this->tags = $tags;
return $this;
}
/**
* @return \Doctrine\Common\Collections\ArrayCollection
*/
public function getTags()
{
return $this->tags;
}
/**
* Add tag
*
* @param Tag $tag
* @return Urls
*/
public function addTag(Tag $tag)
{
$this->tags->add($tag);
return $this;
}
/**
* Remove tag
*
* @param Tags $tag
*/
public function removeTag(Tag $tag)
{
$this->tags->removeElement($tag);
}
}
答案 0 :(得分:0)
尝试将其实现为表单类:
public function getName()
{
return 'filter_type_url';
}
public function getParent()
{
return 'multiselectentity';
}