我有一个Doctrine实体列表(称为“ Circuit ”),并希望生成一个表单,在< table> 中列出它们并添加一个方法勾选它们进行大量删除(Sonata Admin的功能,无需管理类)。
我到处寻找,但我无法弄清楚我的生活该怎么做。这个类只有一个层(普通旧对象),每次我尝试将集合类型添加到我的表单构建器时,我都会收到以下错误:
属性“电路”和方法之一“getCircuits()”,“circuits()”,“isCircuits()”,“hasCircuits()”,“__ get()”,“__ call()”都不存在并在“NetDev \ CoreBundle \ Entity \ Circuit”类中进行公共访问。
我是否应该创建一个“代理”类来创建电路集合?我错过了什么吗?
到目前为止,我发现的所有方法都使用了像“文章”这样的“主”类和像“类别”这样的子类的集合,这些类不适用于我目前的问题。
这是我的 CircuitsController.php (我使用“addAction”进行测试,最终所有内容都将位于indexAction中):
<?php
namespace NetDev\WebManagerBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use NetDev\CoreBundle\Form\CircuitType;
use NetDev\CoreBundle\Entity\Circuit;
class CircuitsController extends Controller {
public function indexAction($page = 1) {
$listCircuits = $this->getDoctrine()->getManager()->getRepository('NetDevCoreBundle:Circuit')->findAll();
$content = $this->get('templating')->render('NetDevWebManagerBundle:Circuits:index.html.twig',
array('listCircuits' => $listCircuits));
return new Response($content);
}
public function addAction(Request $request) {
$circuit = new Circuit();
$form = $this->createForm(new CircuitType(), $circuit);
if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
/* some action that is not actually relevant */
}
return new Response($this->get('templating')->render('NetDevWebManagerBundle:Circuits:add.html.twig',
array('circuit' => $circuit,
'form' => $form->createView())));
}
CircuitType.php 文件:
<?php
namespace NetDev\CoreBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class CircuitType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('circuits', 'collection', array('type' => 'entity', 'allow_add' => true,
'allow_delete' => true, 'by_reference' => false,
'label' => false,
'options' => array('class' => 'NetDevCoreBundle:Circuit',
'label' => false, 'multiple' => true,
'expanded' => true)
))
/* ->add('vlanId', 'integer', array('required' => true, 'label' => 'VLAN ID')) */
/* ->add('popOut', 'text', array('required' => true, 'label' => 'Injecting PoP', */
/* 'max_length' => 3)) */
/* ->add('popsIn', 'textarea', array('required' => true, 'label' => 'Listening PoP')) */
/* ->add('bandwidth', 'integer', array('label' => 'Bandwidth')) */
/* ->add('xconnectId', 'text', array('label' => 'Cross-connect ID')) */
/* ->add('Create', 'submit') */
;
}
/**
* @return string
*/
public function getName()
{
return 'netdev_corebundle_circuit';
}
}
最后, Circuit.php 实体文件:
<?php
namespace NetDev\CoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Circuit
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="NetDev\CoreBundle\Entity\CircuitRepository")
*/
class Circuit
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="vlan_id", type="integer")
* @Assert\Type(type="int")
* @Assert\Range(min="1", max="4096")
*/
private $vlanId;
/**
* @var array
*
* @ORM\Column(name="pop_out", type="array")
* @Assert\NotBlank()
* @Assert\Length(max=3)
*/
private $popOut;
/**
* @var array
*
* @ORM\Column(name="pops_in", type="array")
* @Assert\NotBlank()
*/
private $popsIn;
/**
* @var integer
*
* @ORM\Column(name="bandwidth", type="integer")
* @Assert\Type(type="int")
*/
private $bandwidth;
/**
* @var string
*
* @ORM\Column(name="xconnect_id", type="string", length=255)
* @Assert\NotBlank()
* @Assert\Length(max="255")
*/
private $xconnectId;
/* Getters and Setters stripped for clarity's sake */
public function __toString() {
return "{$this->vlanId}-{$this->popOut}";
}
}
如果你需要树枝模板告诉我,我还没有添加它,因为我甚至没有接近从该例外输出的东西。
答案 0 :(得分:0)
正如@Cerad所说,这里的答案是传递
的结果$listCircuits = $this->getDoctrine()->getManager()->getRepository('NetDevCoreBundle:Circuit')->findAll();
直接收藏。之后一切都很顺利。