我将稍微描述一下我的模型的架构来理解我的问题:我正在开发一个Symfony2网络应用程序。
我安装了sonataMongoDB Admin Bundle来创建我的Admin部分。
该应用程序是一个在线Quizzer实际上我有一个文件用户参考了许多文件Quizz。当我显示用户列表时,我需要测验字段变为可点击以进入测验并查看结果。
以下是ConfigureListFields函数的代码:
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('email')
->add('firstName')
->add('lastName')
->add('quizz', null, array('label' => 'Quiz Passd : Result'))
->add('_action', 'actions', array(
'actions' => array(
'inscription' => array('template' => 'ATSAdminBundle:CRUD:list__action_inscription.html.twig'),
'edit' => array(),
)
))
;
}
在这里我如何得到我的测验对象:
public function __toString()
{
return $this->getResult() ;
}
但是我希望Quiz Field变得可点击而不像简单的String那样显示。
答案 0 :(得分:0)
我认为默认情况下,列表视图不会链接一对多对象。 您可以通过创建自定义模板(就像您对操作所做的那样)来执行此操作,您可以在其中循环查看并链接它们,例如:
{% block field %}
<div>
{% foreach object.quizzes as quizz %}
....
{% foreach %}
</div>
{% endblock %}
如果quizz是单个相关对象,则只需要Quizz的另一个管理员类,并允许show
或edit
规则。默认情况下,Sonata会链接到edit
规则。因此,如果您没有编辑Quizz的角色,则不会链接任何内容。也许这是你的主要问题。
如果是这种情况,请尝试使用以下代码来验证它:
->add('quizz', null, array('label' => 'Quiz Passd : Result', 'route' => 'show'))
最后但并非最不重要的是,在父对象的show视图中链接到show
路由更为常见。然后,您可以在标签菜单中添加您的Quizz:
protected function configureTabMenu(MenuItemInterface $menu, $action, AdminInterface $childAdmin = null)
{
$menu->addChild($this->trans('Quizzes'), array(
'uri' => $admin->generateUrl('sonata.admin.quizz.list', array('id' => $id)),
));
}