symfony2从表单类型生成obj

时间:2014-03-09 14:14:46

标签: php forms symfony

我写了一个小的symfony2应用程序,它允许你提出问题,每个问题至少有一个任务,并由用户询问。

但目前我遇到以下错误

“属性”问题“和”getQuestion()“,”isQuestion()“,”hasQuestion()“,”__ get()“都不存在,并且在类”NAMESPACE“中有公共访问权限(问题) “:”

而且我真的不知道为什么会出现这个错误,如果有人能解释这个错误导致什么,那将是非常有用的。 为什么symfony认为问题实体应该采用其中一种方法。

以下是课程:

问题类别(实体),

class Question extends Post
{
/*
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 * @ORM\Column(type="integer")
 */
protected $id;
/**
 * @ORM\ManyToMany(targetEntity="PLACEHOLDER")
 * @Assert\NotBlank(message="You should select at least one tag.")
 */
protected $tags;

/**
 * @var string
 * @ORM\Column(type="text")
 * @Assert\NotBlank(message="You have to input a heading.")
 */
protected $heading;

/**
 * @var string
 * 
 * @ORM\Column(type="text")
 * @Assert\NotBlank(message="You have to enter a question text.")
 */
protected $text;

/**
 * @var \DateTime
 * 
 * @ORM\Column(type="datetime")
 */
protected $date;

/**
 * 
 * @ORM\ManyToOne(targetEntity="PLACEHOLDER")
 */
protected $user;

/**
 * Constructor
 */
public function __construct()
{
    $this->tags = new \Doctrine\Common\Collections\ArrayCollection();
}
// GETTERS / SETTERS .... 
}

问题类型类(表格),

class QuestionType extends AbstractType
{
    /**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('tags', 'entity', array( 'class'=>'fully qualified class name(tag)',
                                        'property'=>'name'))
        ->add('heading', 'text')
        ->add('question', 'textarea')
        ->add('submit', 'submit')
    ;
}

/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'fully qualified class names (Question Entity)'
    ));
}


/**
 * @return string
 */
public function getName()
{
    return 'PLACEHOLDER';
}
}

和问题控制器行动:

public function askQuestionAction(Request $request)
{

    $form = $this->createForm(new QuestionType, new Question);
    $form->handleRequest($request);

    if ($form->isValid()) {
        // persist
    }

    return array('form' => $form->createView());
}

2 个答案:

答案 0 :(得分:1)

您正尝试使用

将表单绑定到Question实体
$form = $this->createForm(new QuestionType, new Question);
$form->handleRequest($request);

表单上有questionhandleRequest会尝试绑定到Question实体。

查看代码时,->add('question', 'textarea')实际上不应该是->add('text', 'textarea')

答案 1 :(得分:0)

PLACEHOLDER(Namespace to Question Entity)和此PLACEHOLDER(Namespace to Tag class)。那些应该是完全限定的类名

EG。 MyVendor\MyBundle\Entity\MyEntity