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 :

Some mandatory parameters are missing


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 14
    Points : 12
    Points
    12
    Par défaut Some mandatory parameters are missing
    Bonjour,

    je suis entrain de tester un moteur de recherche et vu que je débute avec symfony j'ai eu cette erreur:
    "Some mandatory parameters are missing ("publishedAt") to generate a URL for route "obtao-article-search". " que je pense une mal configuration de rounting.yml
    le contorleur:
    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
    23
    24
    25
    26
     
     public function listAction(Request $request)
        {
            $articleSearch = new ArticleSearch();
     
            $articleSearchForm = $this->get('form.factory')
                ->createNamed(
                    '',
                    'article_search_type',
                    $articleSearch,
                    array(
                        'action' => $this->generateUrl('obtao-article-search'),
                        'method' => 'GET'
                    )
                );
            $articleSearchForm->handleRequest($request);
            $articleSearch = $articleSearchForm->getData();
     
            $elasticaManager = $this->container->get('fos_elastica.manager');
            $results = $elasticaManager->getRepository('ObtaoBlogBundle:Artic')->search($articleSearch);
     
            return $this->render('ObtaoBlogBundle:Article:list.html.twig',array(
                'results' => $results,
                'articleSearchForm' => $articleSearchForm->createView(),
            ));
        }
    le rounting:
    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
    23
    24
    25
    26
    27
    28
    29
    30
     
    obtao_blog_homepage:
        pattern:  /hello/{name}
        defaults: { _controller: ObtaoBlogBundle:Default:index }
     
     
    obtao-article-search:
        pattern:   /list/{title}
        defaults:  { _controller:ObtaoBlogBundle:Article:list }
        requirements:
          _method: GET
     
    obtao-article-search:
        pattern:   /list/{content}
        defaults:  { _controller:ObtaoBlogBundle:Article:list }
        requirements:
          _method: GET
     
     
    obtao-article-search:
        pattern:   /list/{isPublished}
        defaults:  { _controller:ObtaoBlogBundle:Article:list }
        requirements:
          _method: GET
     
    obtao-article-search:
        pattern:   /list/{publishedAt}
        defaults:  { _controller:ObtaoBlogBundle:Article:list }
        requirements:
          _method: GET
    list.twig.html
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    {% extends 'ObtaoBlogBundle::layout.html.twig' %}
     
    {% block body %}
     
        <h1>List of articles</h1>
     
        <h2>Filter</h2>
        <div class="row">
            <div class="col-md-5">
                {{ form(articleSearchForm) }}
            </div>
        </div>
     
     
        <h2>Results ({{ results|length }})</h2>
        <ul>
            {% for article in results %}
                <li>
                    <h3>{{ artic.title }}</h3>
                    <p>{{ artic.content }}</p>
                    <p>
                        <strong>Status : </strong>
                        {% if artic.isPublished %}
                            Published on {{ artic.publishedAt|date('m/d/Y') }}
                        {% else %}
                            Not published yet
                        {% endif %}
                    </p>
                </li>
            {% else %}
                <li>No result for this search</li>
            {% endfor %}
        </ul>
    {% endblock %}
    j'espère avoir un réponse le plus tôt possible ,merci d'avance

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Attention tu as deux routes qui ont la même clé : la première ne sert donc à rien.
    EDIT: quatre routes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    obtao-article-search:
        pattern:   /list/{content}
        defaults:  { _controller:ObtaoBlogBundle:Article:list }
        requirements:
          _method: GET
     
    obtao-article-search:
        pattern:   /list/{publishedAt}
        defaults:  { _controller:ObtaoBlogBundle:Article:list }
        requirements:
          _method: GET


    Ca c'est ta route : elle attent un paramètre "publishedAt" pour être générée.
    Et ça c'est quand tu l'appelles :

    $this->generateUrl('obtao-article-search')
    Tu n'as pas passé de paramètre "publishedAt".

    Donc ... tu devrais avoir quelque chose comme ça :

    $this->generateUrl('obtao-article-search', array('publishedAt' => $publishedAt))
    Je te laisse te débrouiller pour savoir ce que contient la variable $publishedAt.

    ++

  3. #3
    Membre habitué Avatar de anikon
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 133
    Points
    133
    Par défaut
    Le post a peut être été mis à jour mais je vois 4 routes identique (selon leur pattern). Et petite précision, dans Symfony 2 c'est la première route trouvée qui est utilisée :

    http://symfony.com/fr/doc/current/book/routing.html
    Le routeur Symfony choisira toujours la première route correspondante qu'il trouve

  4. #4
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Citation Envoyé par anikon Voir le message
    Le post a peut être été mis à jour mais je vois 4 routes identique (selon leur pattern). Et petite précision, dans Symfony 2 c'est la première route trouvée qui est utilisée :

    http://symfony.com/fr/doc/current/book/routing.html
    Le routeur Symfony choisira toujours la première route correspondante qu'il trouve

    Ce que tu dis est vrai pour le matching des routes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    route_key_1:
        pattern:    /my/route/{parameter}
        defaults:  { _controller:MyBundle:Controller:action1 }
     
    route_key_2:
        pattern:    /my/route/{parameter}
        defaults:  { _controller:MyBundle:Controller:action2 }
    L'appel de l'URL /my/route/3 va effectivement utiliser la première route qui matche : donc rentrer dans l'action1.

    Mais là il ne s'agit pas de ça : si tu définis plusieurs routes avec des actions différentes possédant la même clé, c'est la dernière clé qui sera prise en compte au moment de générer une URL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    route_key:
        pattern:    /my/route/{parameter}
        defaults:  { _controller:MyBundle:Controller:action1 }
     
    route_key
        pattern:    /my/otherRoute
        defaults:  { _controller:MyBundle:Controller:action2 }
    Dans ce cas, (et c'est le cas pour l'auteur de ce post) c'est la dernière route qui sera générée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->generateUrl('route_key')
    ... génèrera l'url /my/otherRoute.

    D'ou le message d'erreur qu'il signale :
    "Some mandatory parameters are missing ("publishedAt") to generate a URL for route "obtao-article-search".
    qui correspond à la dernière route.

  5. #5
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Concrètement change juste le nom des clés dans ton routing de manière à ce que chacune des clés soit unique. Et prend soin d'appeler la bonne clé là ou elles sont utilisées, en n'oubliant pas de fournir le(s) paramètre(s) si besoin est.

  6. #6
    Membre habitué Avatar de anikon
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 133
    Points
    133
    Par défaut
    Effectivement tu as raison, je ne m'étais jamais posé la question en fait parce que je n'ai jamais mis deux clés identiques.

Discussions similaires

  1. Erreur "Remember that ordinal parameters are 1-based!"
    Par leara500 dans le forum Hibernate
    Réponses: 7
    Dernier message: 18/12/2012, 16h34
  2. [2008R2] "The Parameter is missing a Value"
    Par scharly3 dans le forum SSRS
    Réponses: 0
    Dernier message: 02/02/2012, 16h36
  3. [1.x] route has some missing mandatory parameters (:idacteur)
    Par megaloplex dans le forum Symfony
    Réponses: 10
    Dernier message: 08/06/2010, 13h06
  4. [Data] Remember that ordinal parameters are 1-based!
    Par TomDush dans le forum Spring
    Réponses: 0
    Dernier message: 05/03/2010, 15h06
  5. [PHPMyAdmin] Missing parameter sous IE
    Par patbon dans le forum Installation
    Réponses: 2
    Dernier message: 30/05/2006, 01h24

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