Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Participez à la FAQ symfony


Sujet :

Symfony PHP

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    mai 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2007
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    Comme le fait remarquer mimi68, j'aimerais nuancer ma remarque de façon temporelle : à l'heure actuelle, celle-ci est pertinente mais avec le temps et l'arrivée de plus de tuto 1.4, elle ne servira plus à rien.

  2. #22
    Membre actif

    Profil pro
    Inscrit en
    mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : mai 2008
    Messages : 186
    Points : 232
    Points
    232
    Par défaut [Backend] Comment filtrer les éléments d'une table à partir d'une autre table avec une relation 1:n
    Exemple, on cherche à ajouter un lien permettant d'afficher pour chaque catégorie, tous les contenus qui lui sont associés.

    Dans votre application Backend, sélectionnez votre module, puis créez/éditez votre fichier config/generator.yml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    config:
          actions: ~
          fields:  ~
          list:
            object_actions:
              _edit: ~
              _delete: ~
              getContenu: { label: 'Voir les contenus', action: getContenu }
    object_actions permet de rajouter des actions pour chaque élément de votre liste.
    label: Affichera le lien avec le texte choisi
    action: appelle l'action executeGetContenu dans actions.class.php

    Dans votre fichier actions.class.php du même module, ajoutez l'action:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public function executeGetContenu($request)
        {
            $this->getUser()->setFlash('categorie', $request->getParameter('id')); 
            $this->redirect('@route_contenu');
        }
    En premier lieu on utilise un flash. Le site de Symfony nous dit qu'un flash est un "message éphémère stocké dans la session de l'utilisateur qui sera automatiquement supprimé après la requête suivante".

    Ici on enregistre l'id de la ligne que l'on souhaite voir, dans un identifiant "categorie".
    Et on redirige l'utilisateur vers la page des contenus.

    Pour afficher seulement les contenus dépendant de notre catégorie, Symfony nous propose d'utiliser des filtres.
    Dans le module contenu de votre Backend, éditez le fichier actions.class.php comme ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public function executeIndex(sfWebRequest $request)
        {
     
            $categorie = $this->getUser()->getFlash('categorie');
     
            $this->setFilters(array(
                'categorie_id' => $categorie));
     
            parent::executeIndex($request);
     
        }
    Tout d'abord on va modifier l'action executeIndex en récupérant le flash dans la session de l'utilisateur, en écrivant simplement un getFlash avec le nom de l'identifiant.

    Ensuite on rajoute dans les filtres l'élément que l'on veut filtrer, ici le champs categorie_id, qui aura pour valeur celle que l'on a passé avec le Flash.

    Pour terminer on appelle le reste de la fonction de executeIndex (que l'on peut voir dans le cache).

  3. #23
    Membre actif

    Profil pro
    Inscrit en
    mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : mai 2008
    Messages : 186
    Points : 232
    Points
    232
    Par défaut Comment afficher une image au lieu de son nom dans le backend
    Considérons une table comportant un champs stockant le chemin de l'image enregistrée et une description.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Image:
      columns:
        name:   { type: string(255), notnull: true }
        file:   { type: string(255) }
    Lorsque l'on génère un module image dans le backend, on obtient une présentation des champs id, name et file.
    Si on enregistre une image, elle sera renommée en md5.extension, et ne nous affichera pas l'image mais son nom.

    Pour obtenir l'image, il faut créer un template _photo.php permettant de générer cette image en utilisant l'helper image_tag.

    Tout d'abord dans le fichier generator.yml de votre module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    config:
          actions: ~
          fields:  ~
          list:
            hide: [id]   # permet de cacher le champs id
            display: [name, _photo]
          filter:  ~
          form:    ~
          edit:    ~
          new:     ~
    Dans le dossier templates du module, créez le fichier _photo.php. Ne pas oublier de créer le dossier photos dans le dossier web/uploads.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
        echo image_tag('/uploads/photos/'.$image->getFile());
    ?>

  4. #24
    Membre habitué
    Inscrit en
    mars 2007
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : mars 2007
    Messages : 257
    Points : 138
    Points
    138
    Par défaut Comment configurer sfExtraWidgetsPlugin pour obtenir une version allégée de tinyMCE pour vos formulaires ?
    Si vous avez un formulaire en bas de votre billet pour permettre à vos lecteurs de laisser un commentaire par exemple, vous ne voulez sans doute pas tout l'attirail de widgets que vous offre votre éditeur wysiwyg préfére tinyMCE, mais seulement quelques boutons. Nous allons ensemble plonger dans la config de sfExtraWidgetsPlugin pour voir comment obtenir exactement le nombre de boutons que nous souhaitons.

    Première des choses, vous devez installer sfExtraWidgetsPlugin et suivre les indications d'utilisation de tinyMCE données sur cette page.

    Ensuite, allez dans le répertoire du plugin installé et rendez-vous dans le sous-répertoire lib/widget. Cherchez le fichier sfExtraWidgetFormRichTextarea.class.php, copiez-le et renommez-le comme bon vous semble. Disons par exemple sfRichTextareaLite.class.php. Ouvrez-le et donnez à la classe qu'elle contient exactement le même nom que vous avez donné au fichier. Dans notre cas ca donne ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class sfExtraWidgetFormRichTextarea extends sfWidgetFormTextarea
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class sfRichTextareaLite extends sfWidgetFormTextarea
    Attention: Remarquez que nous n'avons pas modifié l'héritage. Le nom de la classe mère demeure inchangé. Ceci fait, désormais, pour appeler votre éditeur, au lieu de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'mytextarea' => new sfExtraWidgetFormRichTextearea()
    vous devrez faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'mytextarea' => new sfRichTextareaLite()
    Bon, nous sommes à mi-chemin. Abordons maintenant les config proprement dites. Si vous avez suivi les instructions d'installations, vous avez dû mettre certains codes dans le fichier app.yml de votre application, en l'occurrence l'entrée tinymce: sous all:. Recopiez exactement ce code et collez le ailleurs dans le fichiers. Changez l'entrée tinymce que vous venez de coller en tinymcelite (ou en ce que vous voulez). Là-dessous, repérez les entrées suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    theme_advanced_buttons1: "save,bold,italic,underline,strikethrough,emotions,sub,sup,justifyleft,justifycenter,justifyright,justifyfull,bullist,numlist,formatselect,styleselect"
        theme_advanced_buttons2: "cut,copy,paste,pastetext,pasteword,|,search,replace,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,|,insertdate,inserttime,|,pagebreak"
        theme_advanced_buttons3: "tablecontrols,|,charmap,emotions,media,|,fullscreen,code,cleanup,|,visualaid"
    Ce sont là celles qui nous intéressent. Ces lignes correspondent aux trois barres de l'éditeur original avec leurs boutons respectifs. Dans theme_advanced_buttons1, supprimez les noms de tous les boutons dont vous n'avez pas besoins, (supprimez aussi les caractères | avec la virgule suivante si vous ne voulez pas de séparateurs dans les boutons) puis couper/coller à partir de theme_advanced_buttons2 et theme_advanced_buttons3 ceux que vous souhaitez ajouter.

    On va revenir dans notre fichier sfRichTextareaLite.class.php. Dans la fonction configure, vous pouvez configurer la largeur et la hauteur de votre éditeur personnalisé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public function configure($options = array(), $attributes = array())
        {        
            $this->setAttribute('class', 'mceEditor');
            $this->addOption('width', 460);
            $this->addOption('height', 180);
     
            parent::configure($options, $attributes);
        }
    Abordons la méthode suivante de la classe: public function render(...)
    A l'intérieur vous voyez l'attribut $js qui contient beaucoup de configurations. C'est en fait le code js d'initialisation de votre éditeur, qui prend ses valeurs à partir de vos options dans le fichier app.yml. Donc remplacez dans toutes les occurrence de sfConfig::get('app_tinymce...') le morceau tinymce par la nouvelle entrée que vous avez spécifiée plus haut dans le fichier app.yml. Dans notre cas,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sfConfig::get('app_tinymce_theme_advanced_buttons1')
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sfConfig::get('app_tinymcelite_theme_advanced_buttons1')
    . On va désactiver les barres d'outils non voulues comme l'indique la docde tinyMCE. Supprimez donc les valeurs fournis pour theme_advance_buttons2 et theme_advance_button3. Vous devez obtenir quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Theme options
                    theme_advanced_buttons1 : '" . sfConfig::get('app_tinymcelite_theme_advanced_buttons1') . "',
                    theme_advanced_buttons2 : '',
                    theme_advanced_buttons3 : '',
    Ensuite, il faut déclarer la désactivation des boutons dont nous ne voulons pas dans notre éditeur. Là encore, nous nous appuyons sur la doc de tinyMCE
    Ouvrez quelque part sous //Theme options une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    theme_advanced_disable :''
    et citez dans les simples quotes tous les boutons que vous ne voulez pas voir apparaître en les séparant d'une virgule. Vous en avez sans doute supprimé lors de l'édition du fichier app.yml. Reportez-vous à l'entrée tinymce d'où vous aviez fait la copie pour retrouver leurs noms. Si vous ne citez pas les noms des boutons à désactiver, ils s'afficheront quand même, même si vous les supprimez.

    Ouf, on est à la fin. Vous voulez admirer votre zoooli éditeur ? Sauvegardez tous vos fichiers modifiés et dans votre form, faites 'mytextarea' => sfRichTextareaLite() si vous ne l'avez pas encore fait et contempler le résultat dans votre navigateur.
    Une dernière pour tenir la route, laissez aussi de simple quotes vides devant theme_advanced_statusbar_location : si vous ne voulez pas de la barre d'état qui s'affiche en dessous de l'éditeur.

  5. #25
    Membre régulier Avatar de Vicrabb
    Femme Profil pro
    Développeur Web
    Inscrit en
    novembre 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : novembre 2010
    Messages : 66
    Points : 102
    Points
    102
    Par défaut button_to() pour générer des boutons
    Quand vous lisez la documentation symfony, on vous parle surtout des url_for() et des link_to() pour faire vos liens. C'est donc naturellement que vous allez créer vos boutons de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <a href="<?php echo url_for('@homepage')?>"><input type="button" name="homepage" value="Homepage"/></a>
    <?php echo link_to('<input type="button" name="homepage" value="Homepage"/>', '@homepage') ?>
    En parcourant l'API de l'helper pour les URLs, je suis tombée sur button_to(), dont la syntaxe est similaire à link_to, et qui permet de générer des boutons dans des cas simples:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //utilisation avec une route connue style homepage: nom de la valeur de l'input + nom de la route
    button_to('Games','@homepage')
     
    //utilisation avec une route d'une collection, sans passage de paramètre
    button_to('New', 'game/new')
     
    //utilisation avec une route d'une collection, avec paramètre
    button_to('Edit','game/edit?id='.$game->getId())
     
    //utilisation un peu lourde dans le cas de routes "personnalisées"
    button_to('Back to Game', '@game_show_game?id='.$game->getId().'&name_game_slug='.$game->getNameGameSlug())
    Non seulement, cela vous épargne de coder l'entièreté de l'input mais en plus, l'helper génère également le lien. Le seul point qui pourrait vous déranger est l'absence de l'attribut "name" dans le code.

    Symfony par une débutante - Elgg - PHP

    Je suis peut-être diplômée en archéologie mais je ne fouille pas le net pour décrypter le langage SMS, pour lire du code sans la balise du même nom..
    "The cake is lie" - Doug Rattman, Portal

  6. #26
    Membre expérimenté

    Homme Profil pro
    développeur
    Inscrit en
    octobre 2013
    Messages
    1 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 319
    Points : 1 631
    Points
    1 631
    Par défaut [Mise à jour] Quelle est la meilleure version de Symfony pour mon projet ?
    Symfony maintient actuellement deux versions principales:

    • Symfony 3.x.y
    • Symfony 4.x.y


    Nous avons ici omis les versions qui ne sont plus maintenues par le framework https://symfony.com/roadmap
    Le versioning de symfony fonctionne ainsi, par exemple la version 4.x.y

    • 4 correspond à la MAJOR, cela signifie que la rétrocompatibilité ne peut-être assuré. (Si vous développez un projet en symfony 3 et que vous souhaitez migrer, vous devez vous assurer de la rendre compatible avec la version 4 https://symfony.com/doc/current/setu...ade_major.html)
    • x correspond à la MINOR pour l'ajout d'une nouvelle fonctionnalité.
    • y correspond au PATCH pour la correction d'un bug au sein du framework.


    Le choix la version doit se porter sur une version stable avec un support sur le long terme, généralement celle conseillée par la communauté https://symfony.com/doc/current/setup.html .
    Les dernières versions assurent un support ainsi que de nouvelles fonctionnalités et correctif du framework.
    Vous devez aussi prendre une version compatible avec votre version php.

Discussions similaires

  1. Participez à la FAQ JDBC
    Par Mickael Baron dans le forum JDBC
    Réponses: 7
    Dernier message: 23/09/2013, 17h26
  2. Participez à la FAQ Struts
    Par Mickael Baron dans le forum Struts 1
    Réponses: 3
    Dernier message: 05/04/2007, 22h00
  3. [Participez à la FAQ !] La question de la semaine
    Par Giovanny Temgoua dans le forum Langage
    Réponses: 18
    Dernier message: 13/12/2005, 09h58
  4. Participez à la FAQ Java EE
    Par Mickael Baron dans le forum Java EE
    Réponses: 1
    Dernier message: 28/08/2003, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo