symfony2:渲染模板时出错 - 对象无法转换为字符串

时间:2015-02-26 10:54:02

标签: php symfony

我有这个简单的控制器:

class SearchController extends Controller{
public function indexAction(Request $request)
{
    $search = new Search();
    $form = $this->createForm(new SearchType(), $search);
    $form->handleRequest($request);

    if ($form->isValid()) {
        return $this->redirect($this->generateUrl('search'));
    }

    return $this->render('MyApplicationBundle:Search:index.html.twig', array(
        'form' => $form->createView(),
    ));
}
}

这是搜索实体:

class Search {
protected $query;

public function setQuery($query)
{
    $this->query = $query;
}

public function getQuery()
{
    return $this->query;
}
}

这是我的表格:

class SearchType extends AbstractType{
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('query', 'text')
        ->add('search', 'submit');
}

public function getName()
{
    return 'search';
}
}
不幸的是,在尝试渲染表单时

{% extends '::base.html.twig' %}
{% block body %}
{{ form(form) }}
{% endblock %}

我收到了这个错误:

在渲染模板期间抛出异常(“Catchable Fatal Error:类My \ ApplicationBundle \ Entity \ Search的对象无法转换为字符串

BTW,只是HTML的渲染效果很好。

任何想法?谢谢你的帮助

已解决:我找到了一种解决方法,用于更改表单的呈现方式:

    {{ form_start(form, {'attr': {'class': 'form-search'}}) }}
{{ form_widget(form.query, {'attr': {'class': 'form-control search-query'}}) }}
{{ form_end(form) }}

2 个答案:

答案 0 :(得分:1)

我想我找到了你的问题here的答案。

  

AbstractType继承的方法将创建名称   到将导致search的班级名称。但这会导致   渲染时出现问题,因为有一个块来呈现类型search   但对于核心类型。您应该使用a显式设置名称   名称尚未使用(一个好方法是用它的别名作为前缀   束)

所以问题可能在名称search本身。然后尝试指定不同的名称。

答案 1 :(得分:0)

每个表单都需要知道保存基础数据的类的名称,如here所述

您应该将以下方法添加到SearchType类:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'MyApplicationBundle\Entity\Search',
    ));
}

并记得添加以下use方法:

use Symfony\Component\OptionsResolver\OptionsResolverInterface;

希望这个帮助