2017-09-07 3 views
1

J'ai deux (2) administrateurs, UserAdmin et CarAdmin. Dans la vue de liste de UserAdmin, je veux avoir une action personnalisée qui redirige vers CarAdmin créer vueavec l'utilisateur déjà sélectionné.Sonata Admin Bundle: pour créer un nouveau, comment puis-je avoir un utilisateur déjà sélectionné?

Jusqu'à présent, j'ai réussi à créer une action personnalisée avec son contrôleur. Mon défi est de rediriger vers CarAdmin create/new form en passant certains paramètres pour la persistance des données.

Tous les points de référence seront très appréciés. Merci

Répondre

0

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; 
} 
+0

Merci. Exactement ce que je cherchais. – CookieMonster