Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony2] Questions fréquemment posées

Merci de ne pas y poster vos questions.

12 août 2012 à 23:12:13

J'imagine que Symfony 2.1 amène une solution intéressante à ce souci de controller:action dans le JS (cf. le lien donné comme réponse, notamment)
  • Partager sur Facebook
  • Partager sur Twitter
OC à changer FAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
13 août 2012 à 10:08:03

Citation : Ymox

J'imagine que Symfony 2.1 amène une solution intéressante à ce souci de controller:action dans le JS (cf. le lien donné comme réponse, notamment)


Je ne vois pas trop le rapport. Si j'avais besoin de donner une route en JS, je regarderais plutôt de ce côté là : https://github.com/FriendsOfSymfony/FOSJsRoutingBundle
  • Partager sur Facebook
  • Partager sur Twitter
Vous utilisez git et (Composer, Sismo, Symfony ou ctags)? Simplifiez vous la vie avec des hooks!
13 août 2012 à 12:04:27

J'ai interprété l'exemple donné avec hinclude comme une forme d'inclusion de l'action dans du JavaScript, et non donner une route au script pour qu'il appelle l'action. C'est pas ça ?
  • Partager sur Facebook
  • Partager sur Twitter
OC à changer FAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
13 août 2012 à 12:28:40

Bah simcos parle de "donner la route", pas de faire un include, alors je pense pas que ce soit ça, non...
  • Partager sur Facebook
  • Partager sur Twitter
Vous utilisez git et (Composer, Sismo, Symfony ou ctags)? Simplifiez vous la vie avec des hooks!
13 août 2012 à 12:34:05

Donner la route c'est simple : <div data-url="{{ path('la_route') }}" id="ajax_truc"></div>
  • Partager sur Facebook
  • Partager sur Twitter
13 août 2012 à 13:54:54

Citation : Zer0 Abs0lu

Bah simcos parle de "donner la route", pas de faire un include, alors je pense pas que ce soit ça, non...

Au temps pour moi, j'ai effectivement mélangé route et action

Notons que dans pas mal de cas, c'est similaire :D:-° On a rarement deux routes pour une action, et il est impossible d'avoir deux actions pour une route
  • Partager sur Facebook
  • Partager sur Twitter
OC à changer FAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
14 août 2012 à 17:43:00

Citation : Ymox

Avec une de mes méthodes pour récupérer tous les objets liés à un autre, j'ai une erreur qui ressemble à
Notice: Undefined index: schmilblick in […]/vendor/doctrine/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php line #


Réponse : vérifiez vos mappings, il est possible que vous ayez souhaité mettre une relation bidirectionnelle et ne l'avez pas fait complètement, ou à l'inverse, vous vouliez transformer une bidirectionnelle en unidirectionnelle, et vous ne l'avez fait que partiellement. L'oubli d'une instruction de mapping inversedBy est une piste.


Citation : Triviak

On a le test avec "iterable" qui peut servir.

Bien vu, dans mon cas, ça pourrait effectivement m'être utile.
  • Partager sur Facebook
  • Partager sur Twitter
OC à changer FAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
8 septembre 2012 à 18:29:14

Au temps pour moi, en effet je n'avais pas fait attention. Merci, j'ai réussi à la faire marcher. J'ai posté en vitesse avant de partir. Je serais plus attentif la prochaine fois. Je supprime mon message précédent.
  • Partager sur Facebook
  • Partager sur Twitter
10 septembre 2012 à 20:10:10

Une suggestion winzou, je sais que cela prend du temps mais ce serait intéressant de répertorier les questions dans ton premier message et d'y ancrer le lien du message...
  • Partager sur Facebook
  • Partager sur Twitter
10 septembre 2012 à 20:39:29

Citation : Zazou

Une suggestion winzou, je sais que cela prend du temps mais ce serait intéressant de répertorier les questions dans ton premier message et d'y ancrer le lien du message...


+1

Eventuellement, il faudra séparer les réponses Symfony 2.0 de celles Symfony 2.1 (dans le résumé, donc)

Edit (12/09/2012)

En fait, on peut oublier cette séparation si on fait dans le genre de ma réponse sur les traductions

-
Edité par Ymox 2 mai 2013 à 11:57:10

  • Partager sur Facebook
  • Partager sur Twitter
OC à changer FAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
10 septembre 2012 à 20:54:55

Citation : Zazou

Une suggestion winzou, je sais que cela prend du temps mais ce serait intéressant de répertorier les questions dans ton premier message et d'y ancrer le lien du message...



+1

Même si ce topic a pour but de regrouper des questions courantes, de plus en plus de débutants viennent y chercher une réponse. Ce serait un petit plus. Et ça permettrait également de voir en un coup d'oeil si une question est déjà présente avant de faire une proposition.
  • Partager sur Facebook
  • Partager sur Twitter
La source de 99% des bugs se trouve entre la chaise et le clavier.
18 septembre 2012 à 21:31:59

Salut,

Je viens de mettre à jour le premier message du sujet grâce à l'aide de Ymox. Merci tous et particulièrement à lui.

Cette FAQ n'est bien sûr pas terminée, n'hésitez pas à continuer de contribuer ;)
  • Partager sur Facebook
  • Partager sur Twitter
19 septembre 2012 à 14:57:49

Citation


Au secours ! J'ai un problème avec Symfony2 !



Réponse :
Avant toute chose, consultez la documentation ! Symfony2 possède une documentation très riche qui fournit dans plusieurs langues toutes les informations nécessaires à la création d'un projet.

Voici les liens des différentes documentations qui pourraient vous être utiles :



Et voici quelques liens vers des sites externes expliquant certains détails de Symfony2:




Il m'semble que trop de gens oublient qu'il existe des documentations très bien fournies et leur rappeler en haut de la FAQ pourrait être une bonne idée.

Édité : J'ai mis à jour la quote pour y ajouter le blog de Sbeex, en revanche celui de Genokiller n'est visiblement pas fonctionnel pour le moment. J'l'ajouterai plus tard s'il fonctionne à nouveau.
  • Partager sur Facebook
  • Partager sur Twitter
19 septembre 2012 à 16:46:40

Citation : Booteille

Au secours ! J'ai un problème avec Symfony2 !


Je rajouterais qu'une recherche sur google ainsi que sur ce forum permet de trouver pas mal de réponses. Il existe également des blogs qui expliquent certains aspects de Symfony2 plus en détail. Je pense entre autre au blog de Genokiller ou encore à celui de Sbeex (liste non exhaustive, mais n’hésitez pas à ajouter des sources ;) )

Citation


Comment ajouter un namespace dans l'autoload sous Symfony2.1?


Reponse: Il y a deux méthodes pour cela. La premiere consiste à ajouter le namespace dans app/autoload.php grace à la méthode <?php $loader->add()

<?php
// ...
if (!function_exists('intl_get_error_code')) {
    require_once __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';

    $loader
      ->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs')
      ->add('Namespace', __DIR__.'/../vendor')
    ;
}
// ...



La seconde consiste à utiliser composer.json (ne fonctionne que si vous utilisez Composer pour installer vos dépendances)

{
    // ...
    "autoload": {
        "psr-0": {
            "Symfony": "src/",
            "SessionHandlerInterface": "src/Symfony/Component/HttpFoundation/Resources/stubs",
            "VotreNamespace": "chemin/vers/votre/namespace"
        }
    }
    
    // ...
}



votre namespace sera enregistré au prochain php composer.phar update

  • Partager sur Facebook
  • Partager sur Twitter
La source de 99% des bugs se trouve entre la chaise et le clavier.
27 septembre 2012 à 16:39:59


pas sûr des causes à effets, mais ça a résolu mon problème, donc je partage :

Citation


J'ai un message :
No entity manager defined for class /Acme/MonBundle/Entity/Monentity



Réponse :
Vérifie dans config.yml dans doctrine: orm: entity_managers: default: mapping: si ton Bundle est bien déclaré.



et n'hésitez à me corriger si je dis des conneries :)
  • Partager sur Facebook
  • Partager sur Twitter
27 septembre 2012 à 17:31:22

J'avoue que je serais curieux de savoir avec quelle version de Symfony (2.0.x ou 2.1.x) tu as eu ce souci, tout comme savoir si activer/utiliser l'auto-mapping résout aussi la chose.

Pourrais-tu utiliser <pre class="brush:yaml;"></pre> pour la partie de YAML que tu cites, afin d'avoir vraiment un aperçu du code (quitte à mettre un nom de bundle bidon là où il faut le mettre ?)

-
Edité par Ymox 11 août 2013 à 18:14:49

  • Partager sur Facebook
  • Partager sur Twitter
OC à changer FAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
29 septembre 2012 à 15:13:10

Citation : Tony


J'ai toujours l'erreur date.timezone alors que j'ai modifié mon php.ini ! (solution SOUS MAC)


DateTime::__construct(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead



Réponse :

/!\ SOLUTION POUR MAC /!\



En fait il y a deux php.ini à modifier
car il y en a un pour votre serveur local (MAMP, Apache, ..) et un autre pour la console !



Le premier, facile :
c'est celui de MAMP (ou Apache selon votre cas), qui est situé dans le dossier PHP (Pour MAMP : /Applications/MAMP/bin/php/php5.x.x/). Si vous avez plusieurs dossiers php (ex: php5.2.17, php5.3.14, php5.4.4), il faut que vous trouviez la version de php que vous utilisez en allant voir le fichier phpinfo (http://php.net/manual/fr/function.phpinfo.php).

Pour MAMP, ne pas confondre /Applications/MAMP/bin/php/ et /Application/MAMP/conf où se situent aussi des dossiers php, mais pas les bons

.

Dans le fichier php correspondant à votre version, allez dans conf/ et éditez php.ini, trouvez la ligne date.timezone = .. et mettez UTC (ou "Europe/Paris", ça marche aussi).

Le deuxième (celui de la console)

Se fait en mode console pour utiliser "sudo" et ainsi avoir les plein pouvoirs de modification dans /private/etc/.

1. Se mettre dans le dossier etc :

cd /private/etc


2. Editer le fichier php.ini dans /etc/ en Administrateur :

sudo nano /etc/php.ini



Si le fichier php.ini n’existe pas, exécutez la commande suivante. Cela va créer le fichier à partir du fichier par défaut :

sudo cp /etc/php.ini.default /etc/php.ini



3. Lorsque vous êtes dans le fichier chercher la ligne concernée avec un CTRL+W :

date.timezone =



Et modifiez la ligne comme ceci :

date.timezone = UTC



4. Enregistrez avec CTRL+X, puis Y et ensuite ENTER. Redémarrez MAMP (ou Apache).




Citation : Tony


Je viens d'installer mon application Symfony2 sous mac: PDO CONNECTION ERROR, mes paramètres de connexion sont bons, que faire ?


Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in ####PATH###/Connection.php on line 470
 >> doctrine  PDO Connection Error: SQLSTATE[HY000] [2002] No such file or directory


Réponse :
Lire ce tuto : http://blog.axestech.net/2011/07/29/sy [...] ection-error/ très bien expliqué ;)




Citation : Tony


J'ai étendu le bundle FOSUserBundle et je n'arrive pas à écraser les templates (=overriding), que faire ?


Réponse :

1. Vérifier que vous avez bien répliqué la structure des dossiers de FOSUserBunde. Par exemple pour écraser show.html.twig qui se situe dans /vendor/bundles/FOS/UserBundle/Resources/views/Profile/ il faut aussi que vous mettiez votre nouveau show.html.twig dans un dossier Profile : /src/Tony/UserBundle/Resources/views/Profile/

2. Videz le cache ! En effet, aucun changement ne sera apporté si vous ne le faites pas, le template original de FOSUserBundle sera toujours affiché.

  • Partager sur Facebook
  • Partager sur Twitter
9 octobre 2012 à 14:41:03

Citation

Quand j'utilise doctrine:schema:update --force, il m'est dit que tout est bon, mais les tables pour certaines entités ne sont jamais créées/mises à jour !

 

Quand j'utilise doctrine:generate:entities, les getters et setters ne sont pas créés dans certaines de mes entités !

 

J'ai l'impression que mes mappings ne sont pas pris en compte !


Réponse : Vous avez probablement un mélange de types de mappings dans votre bundle, et Symfony ne prend jamais qu'un seul type à la fois. Plusieurs types ne cohabitent pas.

Quelque part dans la génération de votre entité ou de votre bundle, vous n'avez pas spécifié le bon format pour les mappings. Vous n'avez probablement pas de @ORM\QuelqueChose dans votre entité (du moins pas partout, ou vous les avez ajoutés vous-même), mais surtout, si vous allez regarder dans le dossier Ressources/config de votre bundle, vous y trouverez un dossier doctrine, et des fichiers .orm.yml ou .orm.xml, ou un dossier metadata/orm, ou d'autres trucs encore. C'est dû au choix de yml respectivement xml ou php au lieu de annotations soit lors de la génération de l'entité, soit lors de la génération du bundle.  

Ces mappings vont primer sur les éventuelles annotations que vous avez mis dans vos entités, et il les faudrait pour toutes les entités du bundle
  1. Vérifiez que votre bundle est bien déclaré dans AppKernel.php
  2. Vérifiez que vous avez bien déclaré votre bundle dans la configuration pour les mappings. Si vous n'utilisez pas doctrine.orm.auto_mapping: true, votre bundle doit être listé pour que les mappings soient pris en compte
  3. Déplacez les fichiers sur lesquels vous avez travaillé pour cette entité quelque part ailleurs ;
  4. Supprimez le dossier doctrine (vous pouvez en garder une copie de sécurité quelque part, mais vous ne devriez plus en avoir besoin) ;
  5. Re-générez l'entité en faisant attention aux options que vous choisissez ;
  6. Dupliquez les modifications que vous aviez faites vous-même dans la nouvelle version de l'entité depuis l'ancienne version ;
  7. Si cela n'a pas fonctionné et que vous n'avez que cette entité dans le bundle, re-générez le bundle, en faisant attention aux options que vous choisissez.

-
Edité par Ymox 10 avril 2014 à 8:25:27

  • Partager sur Facebook
  • Partager sur Twitter
OC à changer FAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
3 novembre 2012 à 16:07:33

Citation

J'ai une erreur quand je tente d'uploader un fichier ! En substance
Trying to get property of non-object
ou
Fatal error: Call to a member function move() on a non-object


Réponse : vous devez séparer la propriété qui contient le fichier uploadé (que vous ne persisterez pas) du nom du fichier (que vous persisterez). Actuellement, ces erreurs proviennent de ce que vous avez une chaîne dans une propriété qui devrait être de type UploadedFile.

Soit le code suivant

<?php

$this->file = 'test.jpg';
echo ($this->file === null ? 'NULL' : $this->file); // Affiche "test.jpg"
$this->file->test; // Notice: Trying to get property of non-object in test.php on line 5
$this->file->test(); // Fatal error: Call to a member function test() on a non-object in test.php on line 6
  1. Ne stockez pas le nom du fichier dans l'attribut <?php $file, $fichier, $picture, $image ou autre :
    cet attribut doit uniquement contenir l'objet UploadedFile que Symfony génère lors d'upload de fichiers
  2. Enregistrez donc le nom du fichier dans un autre attribut <?php $file_name, $nom_fichier, $picture_name, $nom_image, etc.
  3. Lors de l'édition, recrééz l'objet UploadedFile à partir du nom et du chemin (sauvegardé avec le nom, ou défini quelque part dans votre application)

Vous pouvez vous inspirer du code fourni dans ce sujet  pour vous aider à voir comment gérer le fichier et son nom.

Faites surtout attention à File::getFile, qui est, en conséquence des points ci-dessus, la récupération du fichier et la reconstruction de l'objet UploadedFile avec les informations de la base de données, ainsi qu'à File::preUpload, appelée avant persistence et mise à jour (@ORM\PreUpload, @ORM\PrePersist) pour (entre autres) récupérer le nom du fichier

-
Edité par Ymox 16 avril 2013 à 8:54:51

  • Partager sur Facebook
  • Partager sur Twitter
OC à changer FAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
12 novembre 2012 à 13:34:13

Citation

J'ai suivi à la lettre le tutoriel, mais je n'arrive pas à faire fonctionner le code, que j'ai pourtant copié-collé !


Réponse : vous n'avez pas la version de Symfony qui colle avec le tutoriel. Rendez-vous sur la documentation officielle de Symfony pour avoir les informations qui vous seront utiles et qui colleront à votre version du framework, ou prenez celle pour laquelle le tutoriel a été rédigé ;)

Certains points sont cependant expliqués dans cette FAQ, parcourez les entrées suivantes pour voir si vous ne trouvez pas ce qu'il vous faut, par rapport à un problème précis.
Sinon, si vous êtes sous Symfony 2.1.x ou ultérieur et que vous suivez un tutoriel sur un autre site (:colere:), tous les points qui ont changé d'une version à l'autre sont mentionnés dans le(s) fichier(s) vendor/symfony/symfony/UPGRADE-2.#.md (le # est à remplacer par le(s) numéro(s) de version mineure depuis 1 jusqu'à la version actuelle), que je vous conseille vivement de lire.

On ne pourra jamais traiter tout ce qui pourrait survenir, donc il vous faudra, à un moment où à un autre, vous débrouiller ^^


Citation

J'ai des formulaires embarqués pour une collection, mais Symfony/Doctrine ne me persiste que le dernier objet que j'y ai mis !


Réponse : entre Symfony 2.0.x et 2.1.x, la gestion des formulaires embarqués a quelque peu changé, notamment au niveau de la valeur de l'attribut <div data-prototype="…"> : de $$name$$ pour 2.0.x, la petite partie du prototype à changer lors de l'ajout en JavaScript d'un formulaire embarqué est devenue __name__ pour 2.1.x.

Donc, là ou vous aviez quelque chose comme prototype.replace(/\$\$name\$\$/ig, name), vous devriez avoir quelque chose comme prototype.replace(/__name__/ig, name)


Citation

J'ai des formulaires embarqués, mais à chaque fois que je soumets le formulaire princpal, j'ai une erreur de ce genre
Catchable Fatal Error: Argument 1 passed to Mon\Bundle\Entity\MonEntite::setMonEntiteEmbarquee() must be an instance of Mon\Bundle\Entity\MonEntiteEmbarquee, array given


Réponse :
Dans Symfony 2.1.x, il faut définir le nom de la classe sous-jacente du formulaire avec la méthode setDefaultOptions, comme suit

<?php
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Mon\Bundle\Entity\Entite'
    ));
}


Avec Symfony 2.0.x, c'était getDefaultOptions

<?php
public function getDefaultOptions()
{
    return array(
        'data_class' => 'Mon\Bundle\Entity\Entite',
    );
}

Citation

Quand j'essaie de récupérer mon repositorydans mon contrôleur, j'ai une erreur
Fatal error: Call to undefined method Symfony\Bundle\DoctrineBundle\Registry::getEntityManager()


Réponse : c'est devenu getManager avec Symfony 2.1.x

-
Edité par Ymox 21 septembre 2014 à 12:58:16

  • Partager sur Facebook
  • Partager sur Twitter
OC à changer FAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
22 novembre 2012 à 11:33:39

Citation


Je veux ajouter une contrainte d'unicité d'un champ d'une entité avec l'annotation @UniqueEntity, mais elle n'est pas prise en compte.



Réponse :
Ce problème peut survenir quand vous avez un formulaire avec des validation_groups. Il faut alors définir le validation_group dans l'annotation @UniqueEntity en haut de la classe de l'entité générale. Un exemple est plus parlant :

<?php

namespace Sdz\BlogBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

// Attention à ajouter ce use
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * Sdz\BlogBundle\Entity\Utilisateur
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Sdz\BlogBundle\Entity\UtilisateurRepository")
 * @UniqueEntity(fields={"email"}, groups={"registration"}, message="Cet email est déjà utilisé") // Attention au validation_group
 */
class Utilisateur
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    // Vos autres propriété

    /**
     * @var string $email
     *
     * @Assert\Email(message = "L'adresse email {{ value }} est invalide", checkMX = true, groups={"registration"})  // Attention au validation_group
     * @ORM\Column(name="email", type="string", length=255, unique=true)
     */
    private $email;

    // La suite de votre entité


  • Partager sur Facebook
  • Partager sur Twitter
26 novembre 2012 à 0:56:02

Citation


J'utilise Sublime Texte 2 pour coder, j'aimerais savoir s'il est possible d'obtenir l’auto-complétion du code ainsi que la coloration de la syntaxe des fichiers .twig.



Réponse : Oui ! :)

Tuto :

1) Téléchargez le .zip à cette adresse: https://github.com/Anomareh/PHP-Twig.tmbundle
2) Ouvrez le menu windows, dans la barre de recherche tapez execute, une fenêtre s'ouvrira.
3) Entrez ceci : %APPDATA%/Sublime Text 2/Packages/

Image utilisateur

4) Un dossier s'ouvrira, à l’intérieur de celui-ci placez le dossier nommé PHP-Twig.tmbundle-master présent dans l'archive téléchargée à l'étape une.
5) Redémarrer Sublime Texte 2.


Rendu :

Image utilisateur

Divers styles sont pré-installé et disponible de base pour changer les couleurs, vous pouvez définir les votres.

L’auto-complétion est simple:

Ecrivez par exemple for :

Image utilisateur

Appuyé sur TAB puis Entrée et voyez le résultat :

Image utilisateur

  • Partager sur Facebook
  • Partager sur Twitter
DigitalOcean - Heberger vos sites sur le cloud à partir de 5$ par mois.
3 décembre 2012 à 17:29:26

Citation


Comment récupérer l'id d'un article que je viens tout juste de créer ?



Réponse :
C'est très simple et ne requière pas de requête supplémentaire.

<?php // Note: id est auto-incrémenté

    $article = new Article();
    $article->setTitre('Mon titre');
    $article->setDescription('Ma description');

    $em = $this->getDoctrine()->getManager();
    $em->persist($article);
    $em->flush();

    echo $article->getId(); // Affichera bien l'id de l'article



Je créé un article, je le persiste et le flush, il suffi ensuite de récupérer la variable donné à flush.
Dans mon cas $article->getId() affichera bien l'id et $article contirn bien l'intégralité de l'article qui viens d'être créé et inséré dans la base de donnée :)

  • Partager sur Facebook
  • Partager sur Twitter
DigitalOcean - Heberger vos sites sur le cloud à partir de 5$ par mois.
3 décembre 2012 à 18:46:04

Horreur, la méthode flush() n'a pas d'argument !
Mais le reste est bon.
  • Partager sur Facebook
  • Partager sur Twitter
3 décembre 2012 à 20:24:24

Oups, c'est édité ^^
  • Partager sur Facebook
  • Partager sur Twitter
DigitalOcean - Heberger vos sites sur le cloud à partir de 5$ par mois.
11 décembre 2012 à 15:08:45

Citation


J'ai une boucle for et j'aimerais pouvoir exécuter du code toute les x boucles, comment faire ?


Réponse :

{% for video in videosRecentes %}
    <article class="column{{ cycle(['1', '2', '3'], loop.index0) }}" style="display:inline-block">
        {# ... #}
    </article>
{% endfor %}



loop.index0 permet de compter le nombre de boucle en partant de 0 (0, 1, 2, 3, 4, etc.).
Dans cycle on défini le nombre d'options que l'on veux répéter, pour ma part je veux alterner à chaque boucle le N° de ma class column.

Exemple, le code ci-dessus affichera :

Image utilisateur

Notez que cycle(['1', '2', '3'], loop.index0) peut tout aussi bien être utilisé dans une condition, exemple:

{% if  cycle(['1', '2', '3'], loop.index0) == 1 %}
	{# affichera le code de la condition une boucle sur trois #}
{% endif %}



1 aurait également pu être un array d'entier positif.

  • Partager sur Facebook
  • Partager sur Twitter
DigitalOcean - Heberger vos sites sur le cloud à partir de 5$ par mois.
15 décembre 2012 à 10:57:24

Une version un peu plus "propre", et avec la coloration syntaxique qui va bien :
{% for video in videosRecentes %}
	<article class="column{{ (loop.index0 % 3) + 1 }}" style="display:inline-block">
		{# ... #}
	</article>
{% endfor %}


Kyna, on n'a rien contre le fait que tu contribues à la FAQ, mais je pense que nous apprécierions tous que tu respectes le format donné à la fin du premier message, merci.
  • Partager sur Facebook
  • Partager sur Twitter
OC à changer FAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
19 décembre 2012 à 14:05:15

Citation

Kyna, on n'a rien contre le fait que tu contribues à la FAQ, mais je pense que nous apprécierions tous que tu respectes le format donné à la fin du premier message, merci.


Dsl j'avais pas vus que le premiers post avait été édité depuis le temps que ce topic est ouvert :)

<citation rid="7909433">Une version un peu plus "propre", et avec la coloration syntaxique qui va bien :
{% for video in videosRecentes %}
	<article class="column{{ (loop.index0 % 3) + 1 }}" style="display:inline-block">
		{# ... #}
	</article>
{% endfor %}


C'est bon à savoir pour la coloration de la syntaxe twig, je ne savais pas qu'elle existé sur le site du 0. Une balise <symfony2> serait plus parlant parcontre pour les utilisateurs du forum, surtout que le nombre de personne se mettant à SF2 à l'air d'être de plus nombreux.

Sinon pour ton code il est plus court mais il y a un petit inconvénient dans le cas ou l'utilisateur ne souhaite pas utiliser des nombres, avec mon code on peut tout à fait remplacer 1, 2, 3 par A, B, C si ça nous chante et c'est pour ça que j'utilise, après les deux peuvent aller de paire :)

  • Partager sur Facebook
  • Partager sur Twitter
DigitalOcean - Heberger vos sites sur le cloud à partir de 5$ par mois.
19 décembre 2012 à 14:07:10

Une balise symfony n'aurait pas de sens, c'est juste du PHP hein. Un format twig dans la liste par contre, là ça aurait du sens.
  • Partager sur Facebook
  • Partager sur Twitter