Sonata Admin permet de résoudre une telle tâche assez facile, pas besoin d'effectuer une action personnalisée. L'une des solutions pourrait être:
- Définition d'une custom template pour une colonne de liste UserAdmin, render un bouton spécial (lien) en elle. Un lien devrait conduire à CarAdmin créer une action avec un certain paramètre get.
- Dans CarAdmin de la méthode getNewInstance(), vérifiez que s'il existe un paramètre get spécial, définissez un utilisateur avec cet ID. Cette étape peut aussi être fait dans les méthodes getFormFields(), PrePersist(), etc.
Quelques exemples de code:
Dans UserAdmin
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->add('actions', 'string', array(
'template' => 'your_template_name.html.twig',
'mapped' => false,
)
);
}
En your_template_name.html.twig
<a href="{{ path('route_of_the_car_admin_create', {user: object.id}) }}">Create Car for this user</a>
Dans 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;
}
Merci. Exactement ce que je cherchais. – CookieMonster