呈现表单以插入新实体时出现异常[symfony2]

时间:2016-10-11 19:18:16

标签: symfony doctrine-orm

我有问题来渲染视图以创建新实体,并且无法在这里找到现有问题,所以我要问... 我的应用程序具有属于一个实体Y的实体X,并且可以具有许多实体Z。

当控制台运行时,它可以很好地执行所有这些关系。

  

php app\console doctrine:schema:update --force,

在为实体X生成crud之后,列表页面显示正常,但是用于创建新记录的页面在异常之后抛出:

  

在渲染模板期间抛出了异常   (“警告:call_user_func_array()期望参数1有效   回调,类'Symfony \ Bridge \ Twig \ Extension \ FormExtension'没有   有一个方法'renderer-> humanize'   %path_to_app%\程序\缓存\ dev的\树枝\ 16 \ 16033db1d32d7d10db7a0d24db2f49938a4b2e9a63d231d90bf70d1969563fd0.php   第880行,在第232行的form_div_layout.html.twig中。

可能是什么问题?

更新1:

Exception的触发器位于twig文件中,数据从控制器传递。 在 {{form_widget(form)}}

更新2:

//控制器的方法

/**
 * 
 *
 * @Route("/new", name="class_new")
 * @Template()
 */
public function newAction()
{
    $entity = new Class();
    $form   = $this->createForm(new ClassType(), $entity);

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

//表单类

class ClassType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name')
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Admin\MainBundle\Entity\Class'
        ));
    }

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

//查看

<form action="{{ path('class_create') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}
    <p>
        <button type="submit">Create</button>
    </p>
</form>

3 个答案:

答案 0 :(得分:0)

尝试清空缓存:php bin/console cache:clear并重新运行命令。

如果问题持续存在:如果您使用未定义的函数作为例renderer->humanize并查看layout.html.twig at line 232.

,请在控制器中查看

答案 1 :(得分:0)

我的控制器和视图中没有任何问题。

所以我试着在form_div_layout.html.twig文件中查找,我发现在那里使用了函数humanize,并且异常表示函数没有被定义。

您可以通过以下方式更新项目:composer install

form_div_layout.html.twig:

{%- block form_label -%}
    {% if label is not same as(false) -%}
        {% if not compound -%}
            {% set label_attr = label_attr|merge({'for': id}) %}
        {%- endif -%}
        {% if required -%}
            {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' required')|trim}) %}
        {%- endif -%}
        {% if label is empty -%}
            {%- if label_format is not empty -%}
                {% set label = label_format|replace({
                    '%name%': name,
                    '%id%': id,
                }) %}
            {%- else -%}
                {% set label = name|humanize %}
            {%- endif -%}
        {%- endif -%}
        <label{% for attrname, attrvalue in label_attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %}>{{ translation_domain is same as(false) ? label : label|trans({}, translation_domain) }}</label>
    {%- endif -%}
{%- endblock form_label -%}

{%- block button_label -%}{%- endblock -%}

答案 2 :(得分:0)

几周前我解决了这个问题,但现在我发现了回答的时间。 在将应用版本从2.1移动到2.8之前,这让我很头疼。现在它运作良好。