IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Symfony PHP Discussion :

Utilisation de link_to() dans un formulaire backend


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut Utilisation de link_to() dans un formulaire backend
    Suite des questions de débutant...

    J'ai en base de données deux types d'objets :
    - LienGroupe : contient 1* LienUrl
    - LienUrl.

    J'ai modifié le côté backend pour les objets LienGroupe : au dessous d'une ligne représentant un LienGroupe(libellé etc. + boutons edit/delete classiques), j'ajoute une série de lignes pour liste chaque LienUrl rattaché à ce LienGroupe. Sur chaque ligne, je veux placer un lien permettant de déclencher l'action edit ou delete pour cet objet.

    Pour ce faire, j'insère un partial dans le template du module LienGroupe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php if(count($lien_groupe->getLienUrl())): ?>
    <tr class="sf_admin_row <?php echo $odd ?>">
        <td colspan="6">
    	<table class="listeLiens">
    	    <?php foreach($lien_groupe->getLienUrl() as $i => $lienUrl): $odd = fmod(++$i, 2) ? 'url_odd' : 'url_even' ?>
    	    <tr class="<?php echo $odd ?>">
    		<td class="actionCell">
    		    <?php echo link_to('edit', 'lienurl/edit', array('id' => $lienUrl->getId())) ?>
    		</td>
    		<td class="actionCell">
    		    <?php echo link_to('delete', 'lienurl/delete', array('id' => $lienUrl->getId(), 'confirm' => 'Are you sure?', , 'method' => 'delete')) ?>
    		</td>
    		<td class="libelle"><?php echo $lienUrl ?></td>
    		<td class="url"><?php echo $lienUrl->getUrl(); ?></td>
    	    </tr>
    	    <?php endforeach; ?>
    	</table>
        </td>
    </tr>
    <? endif; ?>
    Quand je clique sur un des liens, je tombe sur l'erreur suivante :
    Fatal error: Call to undefined method sfRoute::getObject() in C:\wamp\www\Compagnie\cache\backend\dev\modules\autoLienurl\actions\actions.class.php on line 111
    Comment dois-je utiliser le link_to() pour que cela fonctionne ?

    [edit -> question reformulée et simplifiée...]

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    A priori le pb n'est pas dans le link_to, mais dans l'usage de l'objet.

    Il me semble que tu confondes $lienUrl et $i

    Essaye plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo link_to('edit', 'lienurl/edit', array('id' => $i->getId())

  3. #3
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Non, $i est bien un indice dans la boucle : initialisé à 0 (implicitement) dans le foreach et incrémenté dans le test qui suit.

    En creusant un peu pendant la pause midi, j'ai vu que la classe sfRoute ne possède pas, en effet, la méthode getObject(). Celle-ci apparaît dans la classe sfObjectRoute.

    Dans le fichier routing.yml déclaré au niveau /backend/config et surchargé nulle part, j'ai bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    lien_url:
      class: sfDoctrineRouteCollection
      options:
        model:                LienUrl
        module:               lienurl
        prefix_path:          /lienurl
        column:               id
        with_wildcard_routes: true
    Je m'attends donc naïvement à ce que la route instanciée soit de type sfDoctrineRoute (extends sfObjectRoute). Mais visiblement, ce n'est pas le cas...

  4. #4
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    J'ai un peu avancé, mais il me manque encore quelque chose...
    Puisque le framework n'instancie pas un objet de type sfObjectRoute, j'ai supposé qu'il n'utilisait pas la famille de routes définies plus haut. J'ai donc créé deux nouvelles routes, une pour l'edit et une pour le delete, toutes deux sur le même modèle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    delete_lien_url:
      url: /lienurl/delete/:id
      class: sfDoctrineRoute
      param:
        module: lienurl
        action: delete
      options:
        model: LienUrl
        type: object
    J'ai modifié le code d'appel au link_to() dans le template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo link_to('&nbsp;&nbsp;&nbsp;&nbsp;', 'edit_lien_url', $lienUrl) ?>
    Il y a du mieux : ça marche bien pour le lien "edit".
    Par contre, le lien "delete" continue de me poser problème.
    Soit j'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo link_to('&nbsp;&nbsp;&nbsp;&nbsp;', 'delete_lien_url', $lienUrl, array('confirm' => 'Are you sure?', 'method' => 'delete')) ?>
    et je retombe sur le message :
    Fatal error: Call to undefined method sfRoute::getObject()
    soit j'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo link_to('delete', 'delete_lien_url', $lienUrl) ?>
    et je tombe sur une page d'erreur :
    500 | Internal Server Error | sfValidatorErrorSchema
    _csrf_token [Required.]
    Et malheureusement, la documentation officielle sur la méthode link_to() ne me renseigne guère...

  5. #5
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    J'ai répondu trop vite...

    En fait je pense que le problème vient de arg 2 et 3 qui devraient être confondu.

    De tête (code pas vérifié)
    [CODE]
    Link_to('edit',
    array('module' => 'lienurl',
    'action' =>'edit',
    'id' => $lienUrl->getId()
    )
    )
    [CODE]

    si ça ne marche pas je plonge dans mes codes pour retrouver la syntaxe exacte.

    Et tu as avantage à utilise le nom de la route plutôt que module + action, si du moins tu utilises les routes dans ton projet.

    Le troisième argument est pour les params html xhtml.

  6. #6
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Il n'aime pas trop cela non plus. Si je mets un array() en arg2, il râle et réclame une string.

Discussions similaires

  1. Utilisation de boutons dans les formulaires
    Par RWood dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/07/2007, 11h55
  2. utilisation des dates dans un formulaire struts
    Par gloglo dans le forum Struts 1
    Réponses: 1
    Dernier message: 18/04/2007, 12h09
  3. Utilisation des boutons dans un formulaire
    Par jackyjoke dans le forum IHM
    Réponses: 1
    Dernier message: 28/11/2006, 14h25
  4. utilisation de CLASS dans un formulaire
    Par lepierre dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 18/11/2004, 16h38

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