Tableau en Twig - Symfony [Résolu]

Messages postés
240
Date d'inscription
mardi 10 novembre 2015
Statut
Membre
Dernière intervention
8 novembre 2019
- - Dernière réponse : chabinot
Messages postés
240
Date d'inscription
mardi 10 novembre 2015
Statut
Membre
Dernière intervention
8 novembre 2019
- 8 nov. 2019 à 08:09
Bonjour,
J'ai un contrôleur HomeController comme suit :
<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class HomeController extends AbstractController
{
    /**
     * @Route("/", name="home")
     */
    public function index()
    {
    	// Tableau audio

    	$audio = [
    		['audio/sardou.mp3', '50 tubes de', 'Michel Sardou'],
    		['audio/brassens.mp3', 'Le meilleur de', 'Georges Brassens']
    	];
    	$r = array_rand($audio);

    	return $this->render('home/index.html.twig', [
    		'audio' => $audio,
    		'r'	   => $r
    	]);
    }
}

Comment puis-je passer et lire le tableau "$audio" dans ma vue twig ?

Merci de votre aide.

Cordialement
Afficher la suite 

4 réponses

Messages postés
26709
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 novembre 2019
1868
0
Merci
Bonjour,
Avec une boucle
https://twig.symfony.com/doc/2.x/tags/for.html
Commenter la réponse de jordane45
Messages postés
240
Date d'inscription
mardi 10 novembre 2015
Statut
Membre
Dernière intervention
8 novembre 2019
2
0
Merci
D'accord, mais il s'agit d'un tableau qui doit envoyer qu'un seul poste aléatoirement.
Voici le code qui doit recevoir un poste de tableau :
<div class="container">
		<div class="audio text-center">
			<audio src="{{ <gras>audio</gras>.1 }}" controls="controls" preload="auto"></audio>	    
		</div>
	</div>

Le source de la balise audio est le premier poste du tableau.
Je ne peux pas faire de boucle.
Aurais-tu une idée ?
jordane45
Messages postés
26709
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 novembre 2019
1868 -
Tu veux le premier élément de l'array ?
Dis.. tu as cherché avant de poser ta question ???
Car bon... y'a quand même la documentation officielle de twig...
Par exemple
https://twig.symfony.com/doc/2.x/filters/first.html
Commenter la réponse de chabinot
Messages postés
240
Date d'inscription
mardi 10 novembre 2015
Statut
Membre
Dernière intervention
8 novembre 2019
2
0
Merci
Oui et non, ce que je veux est de pouvoir lire l'audio de façon aléatoire.
Explication :
En PHP j'ai le tableau suivant :
$audio = [
    		['audio/sardou.mp3', '50 tubes de', 'Michel Sardou'],
    		['audio/brassens.mp3', 'Le meilleur de', 'Georges Brassens']
];
index : $rand = array_rand($audio); 

Je sais faire en PHP pour lire chaque poste du tableau de façon aléatoire,
<audio src="<?= $audio[$r][0] ?>" controls="controls" preload="auto"></audio>
<div class="titre text-center">
   <p><i class="fa fa-music"></i> ~ <?= $audio[$r][1] ?> <?= $audio[$r][2] ?></p>
</div>

Je ne sais pas comment avoir le même rendu dans une vue Twig.
Merci, si tu as une idée (je suis novice en TWIG)
Commenter la réponse de chabinot
Messages postés
240
Date d'inscription
mardi 10 novembre 2015
Statut
Membre
Dernière intervention
8 novembre 2019
2
0
Merci
J'ai trouvé, c'est tout bête.
class HomeController extends AbstractController
{
    /**
     * @Route("/", name="home")
     */
    public function index()
    {
    	// Tableau audio

    	$audios = [
    		['audio/sardou.mp3', '50 tubes de', 'Michel Sardou'],
    		['audio/brassens.mp3', 'Le meilleur de', 'Georges Brassens']
    	];
    	$r = array_rand($audios);

    	return $this->render('home/index.html.twig', [
    		'audios' => $audios[$r][0],
    		'titre'  => $audios[$r][1],
    		'auteur' => $audios[$r][2]
    	]);
    }
}

Dans la vue Twig :
<div class="audio text-center">
     <audio src="{{ audios }}" controls="controls" preload="auto"></audio>	    
     <div class="titre text-center">
	<p><i class="fa fa-music"></i> ~ {{ titre }} {{ auteur }}</p>
    </div>
</div>

Merci encore pour ton aide
Commenter la réponse de chabinot