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 :

Ajout d'une action object_actions -> action does not exist ?


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut Ajout d'une action object_actions -> action does not exist ?
    bonjour, voila j'utilise l'admin generator, je souhaite ajouter une action showInfos sur mes objets donc j'ai modifier mon generator.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     object_actions:
              _edit:
                label: Editer
              showInfos: { label: Infos, action: showInfos}
    Puis j'ai rajouté dans actions\actions.class.php le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class generalActions extends autoGeneralActions
    {
      public  function executeShowInfos (sfWebRequest $request)
      {
        $this->hardware = Doctrine::getTable('hardware')->createQuery('a')->addWhere('id='.$request->getParameter("id"))->fetchOne();    
        $this->setTemplate('showInfos');     
      }
    }
    j'ai ajouter dans les templates un fichier showInfosSuccess.php pour afficher mes infos
    et donc quand je souhaite exécuter l'action j'ai l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    404 | Not Found | sfError404Exception
    Action "general/action" does not exist.

  2. #2
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Bonjour,

    Première chose, tu peux enlever le $this->setTemplate('showInfos'); de ton action, symfony le fait automatiquement ici.
    Ensuite, il semble que ton problème soit un problème de route. En effet, le framework de routing essaye de charger l'action 'action' du module 'general'.

    L'erreur arrive quand tu cliques sur Infos ? Si oui, quelle est l'url affichée dans la barre d'adresse ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    dsl pour le mp,

    sinon oui l'erreur arrive aprés avoir cliqué sur infos,
    et pour l'url j'ai
    http://localhost/monprojet/web/front...?id_hardware=1

    merci encore

  4. #4
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Le problème vient donc de là. Normalement, étant donné qu'il s'agit d'un object action, l'url aurait dû être :
    http://localhost/monprojet/web/front...al/1/showInfos ou quelque chose du style.
    Peux-tu poster la partie de ton routing.yml correspondante ainsi que le lien du bouton edit de l'admin generator ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    Le routing je ne l'ai jamais touché

    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
    21
    22
    hardware:
      class: sfDoctrineRouteCollection
      options:
        model:                hardware
        module:               general
        prefix_path:          /general
        column:               idHardware
        with_wildcard_routes: true
     
    # default rules
    homepage:
      url:   /
      param: { module: default, action: index }
     
    # generic rules
    # please, remove them by adding more specific rules
    default_index:
      url:   /:module
      param: { action: index }
     
    default:
      url:   /:module/:action/*
    et l'url du bouton edit est la suivante
    http://localhost/monprojet/web/front...eneral/49/edit

  6. #6
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Bon, je ne sais pas si c'est cela mais je vois que dans ton routing, la colonne utilisée pour gérer l'objet est idHardware. Hors ta route générée pour l'action showInfos est id_hardware.
    Il est possible que ce soit fait automatiquement mais essaye de remplacer idHardware par id_hardware dans le routing.

    Petit conseil : mets ces deux routes par défaut en commentaire, elles sont inutiles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    default_index:
      url:   /:module
      param: { action: index }
     
    default:
      url:   /:module/:action/*

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    j'ai remplacé et cela me provoque une erreur direct dans l'index
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The "/general/:id_hardware/edit.:sf_format" route has some missing mandatory parameters (:id_hardware).
    et l'url que tu m'a donné marche nickel
    http://localhost/monprojet/web/front...al/1/showInfos

  8. #8
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Remets idHardware dans le routing alors.

    Tu as touché à un ou plusieurs templates de l'admin generator (copié dans ton module directement) ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    oui j'ai créé plusieur partials pour traiter différents champ de ma liste, puis j'ai showInfosSuccess.php pour afficher ma fiche infos sur un produit vue que l'admin generator ne l'a pas généré.

    je pense que ça doit être une config dans le routing.yml mais je n'ai pas encore vu comment ça fonctionnais.

  10. #10
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    As-tu modifié le fichier _list_td_actions.php ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    non non je n'ai rien modifié d'autres, dans mes templates je n'ai que des partials sur des champs spécifiques et le showInfosSuccess.php

  12. #12
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Je t'avoue que là sans le projet sous les yeux, c'est assez difficile de t'aider plus :/
    Peut-être que quelqu'un d'autre aura une idée. Désolé

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    merci quand même je vais me plonger dans le routing pour comprendre comment ça fonctionne.

    dans mon generator.yml j'ai déclaré mon actions comme cela est ce bon?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            object_actions:
              _edit:
                label: Editer
              showInfos: { label: Infos, action: showInfos}
    mon action est bien showInfos mais il l'écrit action dans l'url au lieux de showinfos,
    bref, merci et bonne soirée

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    il ne faudra pas rajouté des parametres dans le routing.yml par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    general:
      url: /:module/:action/*
      param: { module: general, action: showInfos }
    mais bon ça marche pas

  15. #15
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    En fait, logiquement, il ne faut rien faire. Etant donné que tu travailles sur un object action, l'admin generator (du coup Doctrine) travaille automatiquement sur une doctrine route collection et gère donc les nouvelles actions.

    C'est pour cela que je ne comprends pas d'où vient le problème ici.
    Il ne devrait donc y avoir aucune nécessité de modifier le fichier routing.yml.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    ok, je ne comprend pas non plus, j'ai regardé le code du partial _list_td_actions.php

    pour pouvoir mettre en dur l'url avec l'action showInfos, mais dans le partial l'url est bonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <td>
      <ul class="sf_admin_td_actions">
        <?php echo $helper->linkToEdit($hardware, array(  'label' => 'Editer',  'params' =>   array(  ),  'class_suffix' => 'edit',)) ?>
        <li class="sf_admin_action_showinfos">
          <?php echo link_to(__('Infos', array(), 'messages'), 'general/showInfos?id_hardware='.$hardware->getIdHardware(), array()) ?>
        </li>
      </ul>
    </td>
    mais quand j'execute, le showInfos ce transforme en action
    pourtant j'ai bien déclaré mon action dans le generator.yml

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    personne pour m'aider
    j'ai un peut chercher, je pense qu'il faut parametrer mon routing mais ça ne marche pas, j'ai ce message dans mon log
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Match route "hardware_object" (/general/:idHardware/:action.:sf_format) for /general/showInfos/action with parameters array ( 'module' => 'general', 'action' => 'action', 'sf_format' => 'html', 'idHardware' => 'showInfos',)
    merci

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    Bonjour à tous, je n'ai toujours pas trouvé de réponse à mon problème, j'ai essayé de généré un module dans le backend avec une nouvelle actions et ça me renvoi le même problème.

    De plus j'ai fait un symfony app:routes frontend pour voir les routes du module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    hardware_showInfos          GET    /general/:idHardware/showInfos.:sf_format
    hardware                    GET    /general.:sf_format
    hardware_new                GET    /general/new.:sf_format
    hardware_create             POST   /general.:sf_format
    hardware_edit               GET    /general/:idHardware/edit.:sf_format
    hardware_update             PUT    /general/:idHardware.:sf_format
    hardware_delete             DELETE /general/:idHardware.:sf_format
    hardware_show               GET    /general/:idHardware.:sf_format
    hardware_collection         POST   /general/:action/action.:sf_format
    homepage                    ANY    /
    default_index               ANY    /:module
    default                     ANY    /:module/:action/*
    est ce les bonnes ?
    merci pour votre aide

  19. #19
    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'avoue que j'ai aussi énormément galéré avec ces problèmes de routing.
    Les actions qui sont automatiquement gérées par le framework et intégrées proprement au routing sont les list_actions.
    Je n'ai pas encore essayé d'ajouter des object_actions, apparemment ça a encore l'air d'être une manipulation... peu intuitive

    A vue de nez, je dirais que c'est le :sf_format qui empêche la route d'être reconnue ou le link_to qui ne fait pas son travail.
    Pour le sf_format, je ne sais pas faire mais le cas du link_to qui ne lie pas comme je pense (d'après ce que je comprends de la documentation, mais à tort de toute évidence) qu'il devrait le faire, je l'ai déjà eu souvent et je le résouds en replaçant les URI par la route.

    Je n'ai pas d'explication propre là-dessus mais peut-être devrais-tu essayer de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo link_to(__('Infos', array(), 'messages'), 'general/showInfos?id_hardware='.$hardware->getIdHardware(), array()) ?>
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo link_to(__('Infos', array(), 'messages'), '@hardware_showInfos?id_hardware='.$hardware->getIdHardware()) ?>
    dans le partial _list_td_actions.php.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    yeah, un grand merci pour ton aide

    ça marche bon c'est du bricolage mais ça m'aide quand même
    car j'aurai préféré trouver d'où vient le problème et le modifier à la source, surement le routing ou le generator qui est mal paramétré.

    Pourtant dans les seuls tuto que j'ai trouvé sur la toile ils rajoutent seulement une action dans les object_actions, puis ils créent leur action et cela marche.

    Je reviendrai sur ce problème quand j'aurai plus de connaissance sur le sujet.

    Merci encore

Discussions similaires

  1. Tutoriel MVC : Action "supprimer" does not exist
    Par Invité dans le forum MVC
    Réponses: 8
    Dernier message: 05/04/2011, 17h18
  2. [1.x] Action "sf_guard_user/index" does not exist et compagnie
    Par etoileweb dans le forum Symfony
    Réponses: 1
    Dernier message: 26/08/2010, 20h22
  3. [1.x] Pb routing : Action "artgalery/image" does not exist.
    Par Niennachinoi dans le forum Symfony
    Réponses: 8
    Dernier message: 02/04/2010, 16h17
  4. FATAL 1: Database "x" does not exist in the syste
    Par barbituric dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 17/03/2004, 06h35
  5. [JCreator] "package tools does not exists"
    Par snyper147 dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 2
    Dernier message: 04/05/2003, 20h08

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