我在尝试重现Symfony提供的演示时遇到错误。你可以在这里找到它。 http://symfony.com/doc/current/book/forms.html#book-form-creating-form-classes
当我在控制器中包含表单时,我可以让表单正常工作但是当我将表单作为自己的类时,我最终得到一个错误。
在映射500内部时,无法定义序列项 服务器错误 - ParseException
日志返回:
CRITICAL - 未捕获的PHP异常 Symfony \ Component \ Yaml \ Exception \ ParseException:“你无法定义一个 映射中的序列项“at /vagrant/vendor/symfony/symfony/src/Symfony/Component/Yaml/Parser.php 第81行
我似乎无法找到问题所在。
Task.php文件:
<?php
namespace Acme\TaskBundle\Entity;
class Task
{
protected $task;
protected $dueDate;
public function getTask()
{
return $this->task;
}
public function setTask($task)
{
$this->task = $task;
}
public function getDueDate()
{
return $this->dueDate;
}
public function setDueDate(\DateTime $dueDate = null)
{
$this->dueDate = $dueDate;
}
}
DefaultController.php:
<?php
namespace Acme\TaskBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Acme\TaskBundle\Entity\Task;
use Symfony\Component\HttpFoundation\Request;
use Acme\TaskBundle\Form\Type\TaskType;
class DefaultController extends Controller
{
public function newAction(Request $request)
{
// create a task and give it some dummy data for this example
$task = new Task();
$form = $this->createForm(new TaskType(), $task);
$form->handleRequest($request);
if ($form->isValid()) {
// perform some action, such as saving the task to the database
return $this->redirect($this->generateUrl('task_success'));
}
return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
'form' => $form->createView(),
));
}
}
TaskType.php:
<?php
// src/Acme/TaskBundle/Form/Type/TaskType.php
namespace Acme\TaskBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class TaskType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('task')
->add('dueDate', null, array('mapped' => false))
->add('save', 'submit');
}
public function getName()
{
return 'task';
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\TaskBundle\Entity\Task',
));
}
}
如果您还有其他需要,请告诉我。我在多个文件中尝试过此设置。它必须是小事。它就在Symfony的网站上。
修改
我唯一拥有的YML文件是我在教程中使用的验证文件。 validation.yml文件
# Acme/TaskBundle/Resources/config/validation.yml
Acme\TaskBundle\Entity\Task:
properties:
task:
- NotBlank: ~
dueDate:
- NotBlank: ~
- Type: \DateTime
问题可能是我没有定义数组的yml文件吗?
答案 0 :(得分:4)
你的yml文件中有没有像这样的东西......
stuff:
thing1: one // mapping
thing2: two // mapping
thing3: three // mapping
- four // sequence
根据我的猜测,错误是说你不能在同一个数组语句中混合你的yaml“mapping”和“sequence”。
所以它需要是......
stuff:
thing1: one
thing2: two
thing3:
- four
或
stuff:
thing1: one
thing2: two
thing3: three
thing4: four
取决于您尝试创建的阵列类型
答案 1 :(得分:0)
在您的类型类更改行->add('dueDate', null, array('mapped' => false))
到->add('dueDate', null, array())
您的dueDate
字段确实已映射