我有以下路线:

blog_show:
    path:      /test/123
    defaults:  { _controller: TotalcanBravofillBundle:Test:test }

而这个 Controller :
    public function testAction()
    {
        $form = $this->createForm(new TestType(), new Test());

        return $this->render('TotalcanBravofillBundle:Test:test.html.twig', array(
            'form' => $form->createView(),
       ));
    }

我有这个实体:
...
class Test
{
/**
     * @var string
     *
     * @ORM\Column(name="txt", type="text")
     */
    private $txt;
...

而这种形式:
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('int')
            ->add('txt')
        ;
    }

我有这样的看法:
{% extends "TotalcanBravofillBundle::index.html.twig" %}

{% block content %}
    {{ form_errors(form) }}
    {{ form_widget(form) }}
{% endblock %}

它不起作用;我收到以下错误:
Could not load type "text"
500 Internal Server Error - InvalidArgumentException

我究竟做错了什么?

堆栈跟踪:
at FormRegistry ->getType ('text')
in /var/www/total1/data/bravofill/vendor/symfony/symfony/src/Symfony/Component/Form/FormFactory.php at line 82   +
at FormFactory ->createNamedBuilder ('txt', 'text', null, array('required' => true))
in /var/www/total1/data/bravofill/vendor/symfony/symfony/src/Symfony/Component/Form/FormFactory.php at line 126   +
at FormFactory ->createBuilderForProperty ('Totalcan\BravofillBundle\Entity\Test', 'txt', null, array())
in /var/www/total1/data/bravofill/vendor/symfony/symfony/src/Symfony/Component/Form/FormBuilder.php at line 109   +
at FormBuilder ->create ('txt', null, array())
in /var/www/total1/data/bravofill/vendor/symfony/symfony/src/Symfony/Component/Form/FormBuilder.php at line 270   +
at FormBuilder ->resolveChildren ()
in /var/www/total1/data/bravofill/vendor/symfony/symfony/src/Symfony/Component/Form/FormBuilder.php at line 218   +
at FormBuilder ->getForm ()
in /var/www/total1/data/bravofill/vendor/symfony/symfony/src/Symfony/Component/Form/FormFactory.php at line 39   +
at FormFactory ->create (object(TestType), object(Test), array())
in /var/www/total1/data/bravofill/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php at line 163   +
at Controller ->createForm (object(TestType), object(Test))
in /var/www/total1/data/bravofill/src/Totalcan/BravofillBundle/Controller/TestController.php at line 14   +
at TestController ->testAction ()
at call_user_func_array (array(object(TestController), 'testAction'), array())
in kernel.root_dir/bootstrap.php.cache at line 2774   +
at HttpKernel ->handleRaw (object(Request), '1')
in kernel.root_dir/bootstrap.php.cache at line 2748   +
at HttpKernel ->handle (object(Request), '1', true)
in kernel.root_dir/bootstrap.php.cache at line 2878   +
at ContainerAwareHttpKernel ->handle (object(Request), '1', true)
in kernel.root_dir/bootstrap.php.cache at line 2179   +
at Kernel ->handle (object(Request))
in /var/www/total1/data/bravofill/web/app_dev.php at line 28   +

调试:
form.type.birthday   birthday   container Symfony\Component\Form\Extension\Core\Type\BirthdayType
form.type.button     button     container Symfony\Component\Form\Extension\Core\Type\ButtonType
form.type.checkbox   checkbox   container Symfony\Component\Form\Extension\Core\Type\CheckboxType
form.type.choice     choice     container Symfony\Component\Form\Extension\Core\Type\ChoiceType
form.type.collection collection container Symfony\Component\Form\Extension\Core\Type\CollectionType
form.type.country    country    container Symfony\Component\Form\Extension\Core\Type\CountryType
form.type.currency   currency   container Symfony\Component\Form\Extension\Core\Type\CurrencyType
form.type.date       date       container Symfony\Component\Form\Extension\Core\Type\DateType
form.type.datetime   datetime   container Symfony\Component\Form\Extension\Core\Type\DateTimeType
form.type.email      email      container Symfony\Component\Form\Extension\Core\Type\EmailType
form.type.entity     entity     container Symfony\Bridge\Doctrine\Form\Type\EntityType
form.type.file       file       container Symfony\Component\Form\Extension\Core\Type\FileType
form.type.form       form       container Symfony\Component\Form\Extension\Core\Type\FormType
form.type.hidden     hidden     container Symfony\Component\Form\Extension\Core\Type\HiddenType
form.type.integer    integer    container Symfony\Component\Form\Extension\Core\Type\IntegerType
form.type.language   language   container Symfony\Component\Form\Extension\Core\Type\LanguageType
form.type.locale     locale     container Symfony\Component\Form\Extension\Core\Type\LocaleType
form.type.money      money      container Symfony\Component\Form\Extension\Core\Type\MoneyType
form.type.number     number     container Symfony\Component\Form\Extension\Core\Type\NumberType
form.type.password   password   container Symfony\Component\Form\Extension\Core\Type\PasswordType
form.type.percent    percent    container Symfony\Component\Form\Extension\Core\Type\PercentType
form.type.radio      radio      container Symfony\Component\Form\Extension\Core\Type\RadioType
form.type.repeated   repeated   container Symfony\Component\Form\Extension\Core\Type\RepeatedType
form.type.reset      reset      container Symfony\Component\Form\Extension\Core\Type\ResetType
form.type.search     search     container Symfony\Component\Form\Extension\Core\Type\SearchType
form.type.submit     submit     container Symfony\Component\Form\Extension\Core\Type\SubmitType
form.type.textarea   textarea   container Symfony\Component\Form\Extension\Core\Type\TextareaType
form.type.time       time       container Symfony\Component\Form\Extension\Core\Type\TimeType
form.type.timezone   timezone   container Symfony\Component\Form\Extension\Core\Type\TimezoneType
form.type.url        url        container Symfony\Component\Form\Extension\Core\Type\UrlType

最佳答案

构建表单时,您没有声明实体到字段的任何映射:http://symfony.com/doc/current/book/forms.html#building-the-form

这应该有效:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('int', 'int')
        ->add('txt', 'text')
    ;
}

我强烈建议不要重命名 Symfony2 字段映射 as in the other answer - 每次升级 Symfony 时,您的代码都会中断。

关于symfony - symfony 形式的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17748125/

10-14 13:39