entityAdmin formMapper 的自定义 sonata-admin 模板
Custom sonata-admin template for an entityAdmin formMapper
我有一个 'map' 实体,其字段为 'latitude' 和 'longitude'。这些字段是根据 this jQuery plugin 改编完成的。
虽然在 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 %}
错误是:
Template "SonataAdminBundle:Form:form_admin_fields.html.twig" cannot
be used as a trait in AcmePlacesBundle:Mapa:admincreate.html.twig at
line 1.
而且我不知道如何访问 twig 模板中 MapAdmin.php 中定义的字段 cariables。 {{ form.latitude }} 不起作用
请帮忙!
您不能在自定义模板中使用扩展,扩展只支持单继承。你的 twig 模板中的模板 form_admin_fields.html.twig of SonataAdmin already uses extends, so you must change extends by use :
{% use '::SonataAdminBundle:Form:form_admin_fields.html.twig' %}
您应该能够使用 {{ form.latitude }} 访问您的表单变量。
更新
由于某些原因无法使用,要解决此问题,您只需要做:
{% extends 'SonataAdminBundle:Form:form_admin_fields.html.twig' %}
当您使用新类型 (acme_map) 时,将使用您的自定义表单。
我有一个 'map' 实体,其字段为 'latitude' 和 'longitude'。这些字段是根据 this jQuery plugin 改编完成的。
虽然在 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 %}
错误是:
Template "SonataAdminBundle:Form:form_admin_fields.html.twig" cannot be used as a trait in AcmePlacesBundle:Mapa:admincreate.html.twig at line 1.
而且我不知道如何访问 twig 模板中 MapAdmin.php 中定义的字段 cariables。 {{ form.latitude }} 不起作用
请帮忙!
您不能在自定义模板中使用扩展,扩展只支持单继承。你的 twig 模板中的模板 form_admin_fields.html.twig of SonataAdmin already uses extends, so you must change extends by use :
{% use '::SonataAdminBundle:Form:form_admin_fields.html.twig' %}
您应该能够使用 {{ form.latitude }} 访问您的表单变量。
更新
由于某些原因无法使用,要解决此问题,您只需要做:
{% extends 'SonataAdminBundle:Form:form_admin_fields.html.twig' %}
当您使用新类型 (acme_map) 时,将使用您的自定义表单。