Sonata Admin Bundle:对于创建新的,我如何选择用户?

时间:2017-09-07 20:47:01

标签: symfony sonata-admin symfony-sonata sonata-user-bundle

我有两(2)个管理员,UserAdmin和CarAdmin。从UserAdmin的列表视图中,我想要一个自定义操作,重定向到CarAdmin 创建视图 ,并且已经选择了用户。

到目前为止,我已设法使用其控制器创建自定义操作。我的挑战是重定向到CarAdmin创建/新表单,传递一些数据持久性参数。

任何参考点都将非常感激。  感谢

1 个答案:

答案 0 :(得分:0)

Sonata Admin可以轻松解决此类任务,无需进行自定义操作。其中一个解决方案可能是:

  • 在UserAdmin列表视图中为一列定义custom template,在其中呈现一个特殊按钮(链接)。链接应该导致CarAdmin使用一些get参数创建操作。
  • 在方法getNewInstance()中的CarAdmin中检查是否存在特殊的get参数 - 设置具有该ID的用户。此步骤也可以在方法getFormFields(),prePersist()等中完成。

一些代码示例:

在UserAdmin中

protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->add('actions', 'string', array(
            'template' => 'your_template_name.html.twig',
            'mapped' => false,
            )
       );
}

在your_template_name.html.twig

<a href="{{ path('route_of_the_car_admin_create', {user: object.id}) }}">Create Car for this user</a>

在CarAdmin中

public function getNewInstance()
{
    $car= parent::getNewInstance();

    $userId = $this->getRequest()->query->get('user');
    if ($userId) {
        $em = $this->modelManager->getEntityManager(User::class);
        $user = $em->getRepository(User::class)->find($id);
        $car->setUser($user);
    }
    return $car;
}