Cha*_*nel 3 symfony sonata-admin
我想提供与我当前实体列表的相关实体的直接链接.
我试图addIdentifier用于相关实体列,但它将我重定向到我当前的实体.
我在文档中没有发现任何解释如何实现这一点.
这是我正在做的一个例子:

我目前正在列出我的"数据配置文件"实体.他们有相关的实体,如"Entrainement","Niveau"或"Program".如果我点击"Se defouler",我希望被重定向到"程序"列表,对于显示相关实体的每个列,我也是如此.
这是我configureListFields当前管理类的实现:
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier( 'type.titre' , null, array ( 'label' => 'Type') )
->add('valeur', null, array ( 'label' => 'Valeur' ) )
->add('bioprofile.titre', null, array ( 'label' => 'Bio Profile' ) )
->add( 'exercicesData.entrainement.niveau.titre', null, array( 'label' => 'Niveau' , 'route' => array( 'name' => 'edit') ) )
->add( 'exercicesData.entrainement.titre' , many_to_one, array ( 'label' => 'Entrainement' ) )
->add( 'exercicesData.entrainement.niveau.programme.titre' , null , array ( 'label' => 'Programme' ) )
->add('_action', 'actions', array(
'actions' => array(
'show' => array(),
'edit' => array(),
'delete' => array(),
)
))
;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的方法:
它们都不起作用.
PS:在屏幕截图中,"Niveau 2","Seance 1"和"se defouler"上有一些链接.它们实际上是使用显示的addIdentifier.
Pic*_*oss 16
Sonata仅在添加实体时添加指向相关实体的链接,而不是在添加实体属性时添加.
以下示例将添加指向以下内容的链接Entity2:
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
...
->add('Entity2')
...
;
}
Run Code Online (Sandbox Code Playgroud)
虽然此示例不会添加指向以下内容的链接entity2:
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
...
->add('Entity2.name')
...
;
}
Run Code Online (Sandbox Code Playgroud)
如果要name在链接中显示属性,则必须在以下位置添加或更改__toString()方法Entity2:
class Entity2
{
...
public function __toString()
{
return (string) $this->name;
}
}
Run Code Online (Sandbox Code Playgroud)
您的管理员类应该是这样的:
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier( 'type.titre' , null, array ( 'label' => 'Type') )
->add('valeur', null, array ( 'label' => 'Valeur' ) )
->add('bioprofile.titre', null, array ( 'label' => 'Bio Profile' ) )
->add( 'exercicesData.entrainement.niveau', null, array( 'label' => 'Niveau' , 'route' => array( 'name' => 'edit') ) )
->add( 'exercicesData.entrainement' , many_to_one, array ( 'label' => 'Entrainement' ) )
->add( 'exercicesData.entrainement.niveau.programme' , null , array ( 'label' => 'Programme' ) )
->add('_action', 'actions', array(
'actions' => array(
'show' => array(),
'edit' => array(),
'delete' => array(),
)
))
;
}
Run Code Online (Sandbox Code Playgroud)
你应该改变以下实体:
实体Entrainement:
class Entrainement
{
...
public function __toString()
{
return (string) $this->titre;
}
}
Run Code Online (Sandbox Code Playgroud)
实体Niveau:
class Niveau
{
...
public function __toString()
{
return (string) $this->titre;
}
}
Run Code Online (Sandbox Code Playgroud)
实体Programme:
class Programme
{
...
public function __toString()
{
return (string) $this->titre;
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助