我有一个类Car的对象的管理类。该对象与人或组织有关。
我知道如何为Person和Organization添加一列,并且我有一个指向编辑对象的链接
$listMapper
->add('person', null, array('admin_code' => 'appli.admin.person'))
->add('factory', null, array('admin_code' => 'appli.admin.factory'))
这创建了一个链接(
但是我只想要一列。我做到了:
$listMapper->add('name',null,array('label'=>'Name','template'=>'AcmeBundle:Admin/Car/list_name.html.twig'))
但是在我的模板中我想要这样的东西,但我不明白如何链接到编辑对象:
{% 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 %}
谢谢
答案 0 :(得分:4)
首先为您的字段使用自定义模板:
$listMapper
->add('_action', 'actions',
array(
'label' => 'Person',
'actions' => array('usage' => array('template' =>'MyBundleBundle:CRUD:edit_url.html.twig'))
)
);
在admin类中创建一个生成奏鸣曲编辑网址的函数:
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;
}
创建&#34; edit_url.html.twig&#34;模板
{% 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 %}
答案 1 :(得分:3)
假设两个对象都有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 %}
请注意,sonata admin bundle会根据admin类的$baseRouteName
属性创建编辑路径,并附加操作名称。