Sonata Admin Bundle:为了创建新的,我怎样才能选择用户?
Sonata Admin Bundle: for create new, how can I have user already selected?
我有两 (2) 个管理员,UserAdmin 和 CarAdmin。从 UserAdmin 的列表视图中,我希望有一个自定义操作重定向到 CarAdmin 创建视图 并且用户已经选择。
到目前为止,我已经成功地用它的控制器创建了一个自定义操作。我的挑战是重定向到 CarAdmin create/new 表单传递一些数据持久性参数。
任何参考点将不胜感激。
谢谢
Sonata Admin 可以很容易地解决此类任务,无需进行自定义操作。解决方案之一可能是:
- 为UserAdmin 列表视图中的一列定义一个custom template,在其中呈现一个特殊按钮(link)。 link 应该会导致 CarAdmin 使用一些获取参数创建操作。
- 在 CarAdmin 的方法 getNewInstance() 中检查是否有特殊的获取参数 - 使用该 ID 设置用户。这一步也可以在getFormFields()、prePersist()等方法中完成
一些代码示例:
在用户管理中
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;
}
我有两 (2) 个管理员,UserAdmin 和 CarAdmin。从 UserAdmin 的列表视图中,我希望有一个自定义操作重定向到 CarAdmin 创建视图 并且用户已经选择。
到目前为止,我已经成功地用它的控制器创建了一个自定义操作。我的挑战是重定向到 CarAdmin create/new 表单传递一些数据持久性参数。
任何参考点将不胜感激。 谢谢
Sonata Admin 可以很容易地解决此类任务,无需进行自定义操作。解决方案之一可能是:
- 为UserAdmin 列表视图中的一列定义一个custom template,在其中呈现一个特殊按钮(link)。 link 应该会导致 CarAdmin 使用一些获取参数创建操作。
- 在 CarAdmin 的方法 getNewInstance() 中检查是否有特殊的获取参数 - 使用该 ID 设置用户。这一步也可以在getFormFields()、prePersist()等方法中完成
一些代码示例:
在用户管理中
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;
}