繁体   English   中英

用于EntityAdmin formMapper的自定义sonata-admin模板

[英]Custom sonata-admin template for an entityAdmin formMapper

我有一个带有字段“纬度”和“经度”的“地图”实体。 这些字段是通过改编的jQuery插件完成的。

虽然在Sonata admin中生成Symfony2标准的CRUD效果很好(显然修改了默认生成的代码),但我无法将其集成。 我在模板继承和模板变量方面遇到一些问题。

我的计划是将此管理员插入另一个EntityAdmin内联中,但是即使对于单个实体也无法做到(在这种情况下为MapAdmin)

这是我的MapAdmin

namespace Acme\MapBundle\Admin;

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;

class MapAdmin extends Admin {

// Fields to be shown on create/edit forms
protected function configureFormFields(FormMapper $formMapper) {
    $formMapper

            ->add('descripcion', 'acme_map')
            ->add('latitude', 'acme_map')
            ->add('longitude', 'acme_map')
            ->add('zoom', 'acme_map')
    ;
}

protected function configureDatagridFilters(DatagridMapper $datagridMapper) {
    $datagridMapper
            ->add('descripcion', null, array('label' => 'Mapa'))
    ;
}

// Fields to be shown on lists
protected function configureListFields(ListMapper $listMapper) {
    $listMapper
            ->addIdentifier('descripcion')
    ;
}

public function getFormTheme() {

    return array_merge(
            parent::getFormTheme(), array(
        'AcmePlacesBundle:Resources:Views:Mapa:admincreate.html.twig')
    );
}}

...我注册为服务的表格类型...(别名:acme_map)

namespace Acme\PlacesBundle\Form\Type;

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

class MapType extends AbstractType {
public function getParent()
    {
        return 'text';
    }


/**
 * @return string
 */
public function getName() {
    return 'acme_map';
}

}

...还有我的树枝模板

{% extends '::SonataAdminBundle:Form:form_admin_fields.html.twig' %}
{% block stylesheets %}
    {{ parent() }}

    <link rel="stylesheet" type="text/css" href="{{ asset('css/jquery-gmaps-latlon-picker.css') }}"/>

{% endblock %}

{% block javascripts %}
    {{ parent() }} #}
<script src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script src="{{ asset('js/jquery-gmaps-latlon-picker.js') }}"></script>
{% endblock %}

{% block acme_map_widget %}


<fieldset class="gllpLatlonPicker" id="custom_id">
    {# <input type="text" class="gllpSearchField"/> #}

    {{ form_errors(form.busqueda) }}
    {{ form_widget(form.busqueda) }}
    <input type="button" class="gllpSearchButton" value="search"/>
    <br/><br/>
    <div class="gllpMap">Google Maps</div>
    {# <input type="text" disabled class="gllpLatitude" value="-20"/> #}
    {{ form_errors(form.latitude) }}
    {{ form_widget(form.latitude) }}

    {# <input type="text" disabled class="gllpLongitude" value="-30"/> #}
    {{ form_errors(form.longitude) }}
    {{ form_widget(form.longitude) }}

    {#<input type="text" disabled class="gllpZoom" value="13"/>#}
    {{ form_errors(form.zoom) }}
    {{ form_widget(form.zoom) }}
</fieldset>
<br>


{% endblock %}

错误是:

模板“ SonataAdminBundle:Form:form_admin_fields.html.twig”不能用作第1行AcmePlacesBundle:Mapa:admincreate.html.twig中的特征。

而且我不知道如何访问树枝模板中MapAdmin.php中定义的字段cariables。 {{form.latitude}}不起作用

请帮助!

您不能在自定义模板中使用扩展,扩展仅支持单继承。 SonataAdmin的form_admin_fields.html.twig模板已使用扩展,因此您必须通过在树枝模板中使用来更改扩展:

{% use '::SonataAdminBundle:Form:form_admin_fields.html.twig' %}

您应该可以使用{{form.latitude}}访问表单变量。

UPDATE

由于某些原因,使用无法正常工作,要解决此问题,您只需执行以下操作:

{% extends 'SonataAdminBundle:Form:form_admin_fields.html.twig' %}

当您使用新类型(acme_map)时,将使用您的自定义表单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM