我在 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';
}
}
答案 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')))