我正在尝试显示一个列表,不知何故该字段似乎是活动的唯一方式,如果我不使用“集合”但我想添加东西以防它们不存在。我读到了这样做的方法。
<?php
namespace Monse\WebBundle\Form;
use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilder;
class BasedeDatosType extends AbstractType {
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('nombreBD')
->add('ServidorBD', 'collection', array('type' => new ServidoresBDType()))
;
} public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Monse\WebBundle\Entity\BasedeDatos',
);
}
public function getName()
{
return 'basededatos';
} }
使用此字段不会出现。 使用 - &gt; add('ServidorBD')确实如此,但它不是下拉列表,而且我没有使用集合。
<?php
namespace Monse\WebBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Monse\WebBundle\Entity\BasedeDatos
*
* @ORM\Table()
* @ORM\Entity
*/
class BasedeDatos
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Monse\WebBundle\Entity\ServidoresBD")
* @ORM\JoinColumn(name="servidores_id", referencedColumnName="id",nullable=false)
*
*/
private $servidorBD;
/**
* @var string $nombreBD
*
* @ORM\Column(name="nombreBD", type="string", length=255,unique=true)
*/
private $nombreBD;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set servidorBD
*
* @param integer $servidorBD
*/
public function setServidorBD(\Monse\WebBundle\Entity\ServidoresBD $servidorBD)
{
$this->servidorBD = $servidorBD;
}
/**
* Get servidorBD
*
* @return integer
*/
public function getServidorBD()
{
return $this->servidorBD;
}
/**
* Set nombreBD
*
* @param string $nombreBD
*/
public function setNombreBD($nombreBD)
{
$this->nombreBD = $nombreBD;
}
/**
* Get nombreBD
*
* @return string
*/
public function getNombreBD()
{
return $this->nombreBD;
}
public function __construct()
{
$this->servidorBD = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add servidorBD
*
* @param Monse\WebBundle\Entity\ServidoresBD $servidorBD
*/
public function addServidoresBD(\Monse\WebBundle\Entity\ServidoresBD $servidorBD)
{
$this->servidorBD[] = $servidorBD;
}
}
有没有这样做? (对不起,如果这是一个愚蠢的问题,我正在努力学习如何正确使用symfony2)
答案 0 :(得分:2)
Collection允许您动态添加新表单。所以你需要添加一些javascript
进入表单构建器:
$builder
->add('nombreBD')
->add('ServidorBD', 'collection', array(
'type' => new ServidoresBDType(),
'allow_add' => true,
'by_reference' => false
));
进入你的edit.html.twig(或视图文件): 在其上添加一个按钮和一个点击事件
<div id="collectionContainer"></div>
<script type="text/javascript">
$('#addField').click(function(){
var collectionHolder = $('#ServidorBD');
var prototype = collectionHolder.attr('data-prototype');
var index = $('#collectionContainer').length - 1;
form = prototype.replace(/\$\$name\$\$/g, index);
$('#collectionContainer').append(form);
</script>