1

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

在函数中添加了一行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

如果我将contentbundle_coordinates_map更改为null

->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';
    }
}
4

1 回答 1

2

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

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

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

作为替代方案,如果您只需要自定义表单字段的呈现,那么您甚至不需要创建自己的自定义表单类型。请参阅如何自定义单个字段。我认为这只有在您手动为表单命名时才有可能。(假设它的名字是“内容”)

{# 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')))
于 2012-12-19T09:48:36.540 回答