Symfony2 notice:Sonata Admin中的数组到字符串转换

时间:2012-12-18 13:47:24

标签: php symfony twig symfony-2.1 sonata-admin

我在 Symfony 2.1.3 上使用 Sonata admin 。现在尝试使用谷歌地图添加文本输入。

configureFormFields()功能中添加了一行:

->add('coordinates', 'contentbundle_coordinates_map', array('required' => false,'attr'=>array('class'=>'mapCoordinate')))

注册服务并为此创建模板:

{% block contentbundle_coordinates_map_widget %}
    <script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=true"></script>
    <script type="text/javascript" src="{{ asset('js/add.scripts.js') }}"></script>
    <input type="text" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>
    <div id="add_map" class="map" style="width:500px;height:300px;"></div>
{% endblock %}

可以在管理内容添加页面中查看我的字段与地图,但是当我想提交数据时:

Notice: Array to string conversion in D:\my_vendor_folder\doctrine\dbal\lib\Doctrine\DBAL\Statement.php line 103

如果我使用 null 更改 contentbundle_coordinates_map

->add('coordinates', null, array('required' => false,'attr'=>array('class'=>'mapCoordinate')))
一切正常。

问题出在哪里?

更新

表单类型:

namespace Map\ContentBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class CoordinatesMapType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function getName()
    {
        return 'contentbundle_coordinates_map';
    }
}

1 个答案:

答案 0 :(得分:2)

您应始终为自定义表单类型定义getParent方法,以便继承该特定类型的逻辑。有关类型列表,请参阅here

在这种情况下,您的自定义类型应该返回文本,因此请将以下内容添加到CoordinatesMapType

public function getParent()
{
    return 'text';
}

作为替代方案,如果您只需要自定义表单字段的呈现,那么您甚至不需要创建自己的自定义表单类型。见How to customize an Individual field。我认为只有在您手动为表单命名时才能实现这一点。 (假设它的名字是“内容”)

{# This is in the view where you're rendering the form #}

{% form_theme form _self %}

{% block _content_coordinates_widget %}
    <div class="text_widget">
        <script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=true"></script>
        <script type="text/javascript" src="{{ asset('js/add.scripts.js') }}"></script>
        <input type="text" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>
        <div id="add_map" class="map" style="width:500px;height:300px;"></div>
    </div>
{% endblock %}

在这种情况下,您可以将类型指定为null,如第二个示例所示:

->add('coordinates', null, array('required' => false,'attr'=>array('class'=>'mapCoordinate')))