web-dev-qa-db-fra.com

Comment utiliser Ajax au sein de la Sonata Admin Formulaires?

J'ai une entité marchande avec les champs et associations suivants: -

/**
 * @ORM\ManyToMany(targetEntity="Category", inversedBy="merchants")
 */
public $categories;

/**
 * @ORM\ManyToMany(targetEntity="Tag", inversedBy="merchants")
 */
public $tags;

/**
 * @ORM\ManyToOne(targetEntity="Category", inversedBy="merchants")
 */
protected $primaryCategory;

/**
 * @ORM\ManyToOne(targetEntity="Tag", inversedBy="merchants")
 */
protected $primaryTag;

Les balises et les catégories ont également une cartographie de nombreusesTomanany. Nous avons donc TAG_CATAGORY, MARCHANT_TAG, MARCHANT_CATAGORY Tables de mappage.

Maintenant, je veux effectuer des ajax sur ces champs.

Je veux permettre à l'utilisateur de sélectionner d'abord l'étiquette principale. Sur la base de la balise primaire, AJAX rafraîchissez les catégories à ceux qui appartiennent à cette balise et d'autres autres opérations.

Comment puis-je atteindre cet objectif?

Merci!

29
Amit

Publication très détaillée, juste pour mettre à jour le moyen de remplacer et d'utiliser le modèle modifier dans la classe d'administration.
Maintenant, vous devriez le faire de cette façon:

// src/AppBundle/Admin/EntityAdmin.php  

class EntityAdmin extends Admin
{  
    public function getTemplate($name)
    {
        if ( $name == "edit" ) 
        {
            // template 'base_edit.html.twig' placed in app/Resources/views/Entity
            return 'Entity/base_edit.html.twig' ;
        }
        return parent::getTemplate($name);
    }
}

Ou injecter dans la définition de service utilisée - méthode fournie , pour que la classe d'administration soit aussi propre que possible:

// app/config/services.yml  

app.admin.entity:
    class: AppBundle\Admin\EntityAdmin
    arguments: [~, AppBundle\Entity\Entity, ~]
    tags:
        - {name: sonata.admin, manager_type: orm, group: "Group", label: "Label"}
    calls:
        - [ setTemplate, [edit, Entity/base_edit.html.twig]]
4
guillermogfer

À l'étape 1 de l'amit et la réponse du Lumbendil, vous devriez changer

{% extends base_template %}

dans

{% extends 'SonataAdminBundle::standard_layout.html.twig' %}

si vous obtenez une erreur comme

Unable to find template "" in YourBundle:YourObject:base_edit.html.twig at line 34.  
4
Paul Prijs

dans le bloc Javascripts, vous devez changer "liszt:updated" à "chosen:updated"

j'espère que cela aide quelqu'un;)

2
Hibatallah Aouadni