简体   繁体   English

Sonata管理员自定义列表字段模板包含指向管理员编辑对象的链接

[英]Sonata Admin Custom list field template contains link to admin edit object

I have an admin class of an object of class Car. 我有一个Car类的对象的管理类。 This object is in relation with Person or Organisation. 该对象与个人或组织有关。

I know how to add a column for Person and Organisation, and i have a link to the edit object 我知道如何为“人员和组织”添加一列,并且我有一个指向编辑对象的链接

$listMapper
->add('person', null, array('admin_code' => 'appli.admin.person'))
->add('factory', null, array('admin_code' => 'appli.admin.factory'))

This create a link ( 这将创建一个链接(

However i want just one column. 但是我只想要一列。 I make this : 我做这个:

$listMapper->add('name',null,array('label'=>'Name','template'=>'AcmeBundle:Admin/Car/list_name.html.twig'))

But in my template i want something like this but i don't understand how make the link to the edit object : 但是在我的模板中,我想要这样的东西,但是我不明白如何建立指向编辑对象的链接:

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
{% block field%}
{% if object.getPerson %}
    {% set urlObject = 'linkToAdminEditPerson' %}
{% elseif object.getFactory %}
    {% set urlObject = 'linkToAdminEditFactory' %}
{% endif %}
<a href="{{ urlObject }}">{{ object.name }}</a>
{% endblock %}

Thank You 谢谢

Assuming both objects have a name property: 假设两个对象都有一个name属性:

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
{% block field %}
    {% if object.getPerson is defined %}
        {% set objectRoute = 'person_edit' %}
    {% elseif object.getFactory is defined %}
        {% set objectRoute = 'factory_edit' %}
    {% endif %}
    <a href="{{ path(objectRoute, { id: object.id }) }}">{{ object.name }}</a>
{% endblock %}

Note that sonata admin bundle creates the edit route based on the $baseRouteName property of the admin class, appending the action name. 请注意,sonata管理员捆绑包将基于admin类的$baseRouteName属性创建编辑路由,并添加操作名称。

  1. Firstly use a custom template for your field: 首先,为您的字段使用自定义模板:

     $listMapper ->add('_action', 'actions', array( 'label' => 'Person', 'actions' => array('usage' => array('template' =>'MyBundleBundle:CRUD:edit_url.html.twig')) ) ); 
  2. In admin class create a function that generates a sonata edit url: 在管理类中,创建一个生成奏鸣曲编辑URL的函数:

     public function generateEditUrl($name, $object, $parameters = array(), $absolute = false){ $classname = $object->getNode()->getPropertyValue('phpcr:class'); $admin = $this->getConfigurationPool()->getAdminByClass($classname); $url = $admin->generateObjectUrl($name, $object, $parameters, $absolute); return $url; } 
  3. Create "edit_url.html.twig" template 创建“ edit_url.html.twig”模板

     {% if object.person is defined and object.person is not empty %} <a href="{{ admin.generateEditUrl('edit', object.person, {}, true) }}" target="_blank" title="Edit {{ object.person.title }}"> <i class="icon-edit"></i>{{ object.person.title }} </a> {% endif %} 

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

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