2014-06-20 84 views
0

我不知道什麼是錯,但枝不能訪問變量,我得到Method "name, origin, car" for object "Symfony\Component\Form\FormView" does not exist in CarBrandBundle:Default:both.html.twig at line all of them。我錯過了什麼?我相信這不僅是枝條問題。訪問變量中的表單類型中定義的變量

注:這是一對多的關係,1個品牌可以有很多車。

品牌實體

namespace Car\BrandBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

class BrandEntity 
{ 
    protected $id; 
    protected $name; 
    protected $origin; 

    /** 
    * @ORM\OneToMany(targetEntity = "CarEntity", mappedBy = "brand") 
    * @var object $car 
    */ 
    protected $car; 

    /** 
    * Constructor. 
    */ 
    public function __construct() 
    { 
     $this->car = new ArrayCollection(); 
    } 
} 

CAR實體

namespace Car\BrandBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

class CarEntity 
{ 
    protected $id; 
    protected $model; 
    protected $price; 

    /** 
    * @ORM\ManyToOne(targetEntity="BrandEntity", inversedBy="car") 
    * @ORM\JoinColumn(name="brand_id", referencedColumnName="id") 
    * @var object $brand 
    */ 
    protected $brand; 
} 

CAR表單類型

namespace Car\BrandBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class CarType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->setAction($options['action']) 
      ->setMethod('POST') 
      ->add('model', 'text', array('label' => 'Model')) 
      ->add('price', 'text', array('label' => 'Price')) 
      ->add('button', 'submit', array('label' => 'Add')) 
     ; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Car\BrandBundle\Entity\CarEntity') 
     ); 
    } 

    public function getName() 
    { 
     return 'car'; 
    } 
} 

BOTH表單類型

namespace Car\BrandBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\Test\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class BothType extends AbstractType 
{ 
    public function builder(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->setAction($options['action']) 
      ->setMethod('POST') 
      ->add('name', 'text', array('label' => 'Name')) 
      ->add('origin', 'text', array('label' => 'Origin')) 
      ->add('car', 'collection', array('type' => new CarType())) 
      ->add('button', 'submit', array('label' => 'Add')) 
     ; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Car\BrandBundle\Entity\BrandEntity', 
      'cascade_validation' => true 
     )); 
    } 

    public function getName() 
    { 
     return 'both'; 
    } 
} 

控制器

namespace Car\BrandBundle\Controller; 

use Car\BrandBundle\Entity\BrandEntity; 
use Car\BrandBundle\Form\Type\BothType; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

class BothController extends Controller 
{ 
    public function indexAction() 
    { 
     $form = $this->createForm(new BothType(), new BrandEntity(), 
       array('action' => $this->generateUrl('bothCreate'))); 

     return $this->render('CarBrandBundle:Default:both.html.twig', 
       array('page' => 'Both', 'form' => $form->createView())); 
    } 
} 

嫩枝

{{ form_label(form.name) }} 
{{ form_widget(form.name) }} 

{{ form_label(form.origin) }} 
{{ form_widget(form.origin) }} 


{% for c in form.car %} 
    {{ form_row(c.model) }} 
{% endfor %} 

回答

0

你的問題在於你的實體。即使擁有受保護的屬性,您也需要吸取&制定者。 例如:

protected $name; 
    /** 
    * Set name 
    * 
    * @param string $name 
    * @return Brand 
    */ 
    public function setName($name) 
    { 
     $this->source = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 
+0

對不起,我應該提到它。我在實體中擁有所有的getter和setter,所以問題在於其他方面。 – BentCoder