Bonjour à tous, je vous explique mon point de blocage :
J'effectue une requête Ajax, qui ensuite est traitée par un querybuilder dans mon Repository puis retourné sous forme de Response() afin de l'afficher dans ma vue.
Jusqu'ici cela fonctionne bien, je le fait ainsi (je synthétise le code) :
$.ajax({
url: path,
type: "POST",
data: {
"data": param
},
dataType: "json",
async: true,
success: function (data) {
for (var i = 0; i < data.length; i++) {
$('#testAffichage').append(data[i].UserEmail);
}
}
});
Je ne comprends pas trop. D'une part tu encodes tes résultats en JSON, donc les convertis en une chaîne de caractères, et d'autre part, tu tentes de boucler dessus dans ton template… Ton adaptation pour l'affichage n'a pas été faite jusqu'au bout, là.
Sinon, en ce qui me concerne, je ferais plutôt en sorte que ton JSON retourné précédemment contienne toutes les informations nécessaires pour que l'affichage amélioré soit géré en JavaScript. Vu que c'est le but principal, c'est dommage d'avoir simplifié aussi le code de la vue…
Je te conseille déjà ne plus sérialiser le retour de ta méthode en JSON pour le passer dans ta vue Twig et vouloir boucler dessus… Tu boucles souvent sur une chaîne de caractères ?
Après, ne sachant pas exactement ce que tu souhaites faire comme « affichage amélioré », ça va être difficile de savoir comment t'aider.
S'il n'y a que l'adresse mail à mettre dans ton div.card.card-body, ou/et que tu n'as pas une structure plus complexe à l'intérieur, je pense que je gérerais cette génération en JavaScript chez le client depuis la liste des adresses mail récupérées avec le JSON.
Je note que tu utilises jQuery, ce qui te simplifierait la création de ton div en $('<div class="card card-body">' + mail + '</div>').
Après, libre à toi de rendre les cartes et de retourner le HTML prêt à être inséré, ça peut être plus pratique surtout si la structure des cartes n'est pas juste un div avec deux classes et contenant une adresse mail.
Evidemment, il faut vider le conteneur #searchResult avant de faire la boucle qui va ajouter les nouveaux résultats. Cela se fait avec la méthode jQuery .empty().
Pour l'instant j'ai un code fonctionnel en faisant ainsi, sans passer par Twig :
.append() Ajoute ton code à un code existant.
.html() le remplace.
Dans ma fonction $ajax() :
success: function (data) {
var content = '';
for (var i = 0; i < data.length; i++) {
content += '<div class="card card-body">' + data[i].UserEmail + '</div>';
}
$('#searchResult').html(content);
}
@stoads, je conserve ta technique que j'aurai l'occasion d'utiliser plus tard
Petite question annexe , jusqu'ici je met mon code JS/Jquery <script></script> en bas de mes templates Twig, je ne pense pas que cela soit une bonne pratique et je souhaite externaliser mes scripts JS. Connaissez-vous les bonnes pratiques Symfony4 sur ce sujet ? Merci d'avance.
Petite question annexe : J'ai une Entité "Category" qui est lié à une Entité "Compétences" en OneToMany.
Je souhaite avec deux boutons dropdown(liste déroulante) qui, pour "Category" affiche la liste de toutes les categories en BDD.
Lorsque je sélectionne une "Catégorie", je souhaite avoir au clique sur le bouton dropdown "Compétences" unqiuement le choix possible des Compétences qui sont liés à une Catégorie pré-sélectionné.
Avez-vous une idée de comment faire cela ? en JS ou AJAX évidemment
Javascript: appel ajax puis tu remplaces tes balises <li>
Utiliser les events des formulaires qui récupère ta donnée Catégorie sélectionnée puis grâce à un queryBuilder sur Compétence te renvoie les Compétences liées à la Catégorie sélectionnée
Merci stoads pour tes réponses, j'ai fait une requête ajax qui lance une querybuilder en fonction de l'id séléctionné , j'ignore pourquoi mais ma serialization de l'objet prend 20secondes minimum..
Peux-tu me montrer un exemple de comment tu renvois la "reponse.template" côté ajax comme tu m'a stipulé plus haut ?
Je n'arrive pas à polluer mon template Twig de cette façon.. si tu as un exemple de code c'est parfait
PS: mon éditeur de code sur le forum OC ne fonctionne plus.. error JS..
Encore merci Stoads, j'ai pu faire ce que je voulais grâce au renderView().
Pour la serialization, j'ai créer une politique d'exclusion et n'ai plus de soucis de performance
J'ai une dernière question , j'ai implémenter un bouton de recherche via un input, l'utilisateur renseigne un texte et mon controller renvoie les User qui correspondent ( soit au firstname du User , soit au mail du User).
Mais je souhaite récupérer l'objet entier avec toutes les propriétés, pas uniquement le firstname ou le mail..
Voici ma querybuilder ($value correspond à l'input text envoyer par l'utilisateur ) :
Pour l'insertion de code <code type="php"<// Ici ton code </code> @Ymox Corrige moi si je me trompe!
Alors <code> est uniquement pour la rédaction en Markdown, et celle-ci n'est plus accessible qu'en désactivant le JavaScript afin de désactiver le WYSIWYW qui fiche le dawa plus que de raison actuellement.
De plus, <code> est pour du code inline, pas pour un pavé qui demande plutôt <pre>.
Dernier point : l'attribut type n'existe pas pour ces deux balises. La subtilité pour que la coloration syntaxique puisse fonctionner ici, c'est d'utiliser class, et plutôt que de mettre une simple valeur PHP, c'est brush: php; qu'il faut utiliser — attention, il me semble bien que le ; final est important.
@Ymox Merci pour ces précisions. Au plaisir de te lire encore et encore.
" Celui qui aime à apprendre est bien près du savoir " Confucius
Symfony4 et AJAX
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
" Celui qui aime à apprendre est bien près du savoir " Confucius
" Celui qui aime à apprendre est bien près du savoir " Confucius
" Celui qui aime à apprendre est bien près du savoir " Confucius
" Celui qui aime à apprendre est bien près du savoir " Confucius
" Celui qui aime à apprendre est bien près du savoir " Confucius
" Celui qui aime à apprendre est bien près du savoir " Confucius