Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

<?php
namespace App\Blog;

use App\Blog\Actions\BlogAction;
use Framework\Module;
use App\Framework\Renderer\RendererInterface;
use Framework\Router;

class BlogModule extends Module
{

    const DEFINITIONS= __DIR__ . '/config.php';

    const MIGRATIONS = __DIR__ . '/db/migrations';

    const SEEDS = __DIR__ . '/db/seeds';

    public function __construct(string $prefix, Router $router, RendererInterface $renderer)
    {
        $renderer->addPath('blog', __DIR__ . '/views');
        $router->get($prefix, BlogAction::class, 'blog.index');
        $router->get($prefix . '/{slug:[a-z\-0-9]+} - {id:[0-9]+}', BlogAction::class, 'blog.show');
    }
}
{% extends 'layout.twig' %}

{% block title "Mes articles" %}

{% block body %}
  <h1 style="margin-top: 70px">Bienvenue sur le blog</h1>

  <ul>
    {% for post in posts %}

        <li>
          <a href="{{ path('blog.show', {slug: post.slug, id: post.id}) }}">
            {{ post.name }}
          </a>
        </li>

    {% endfor %}
  </ul>
{% endblock %}

Ce que je veux

Bonsoir tout le monde. De grace je voudrais que vous aidiez à comprendre cette erreure. Merci par avance

Ce que j'obtiens

Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(

Fatal error: Uncaught Zend\Expressive\Router\Exception\RuntimeException: Parameter value for [slug] did not match the regex [a-z\-0-9]+ in /var/www/monFramework/vendor/zendframework/zend-expressive-fastroute/src/FastRouteRouter.php:282 Stack trace: #0 /var/www/monFramework/src/Framework/Router.php(55): Zend\Expressive\Router\FastRouteRouter->generateUri('blog.show', Array) #1 /var/www/monFramework/src/Framework/Router/RouterTwigExtension.php(28): Framework\Router->generateUri('blog.show', Array) #2 /var/www/monFramework/vendor/twig/twig/lib/Twig/Environment.php(378) : eval()'d code(55): Framework\Router\RouterTwigExtension->pathFor('blog.show', Array) #3 /var/www/monFramework/vendor/twig/twig/lib/Twig/Template.php(189): __TwigTemplate_4cd96ec0eb20be9c80765db757474cdc3869633966fc7ca581d802fe78ec117a->block_body(Array, Array) #4 /var/www/monFramework/vendor/twig/twig/lib/Twig/Environment.php(378) : eval()'d code(59): Twig_Template->displayBlock('body', Array, Array) #5 /var/www/monFramework/vendor/twig/twig/lib/Twig/Templ in /var/www/monFramework/src/Blog/views/index.twig on line 12

14 réponses


Bonjour, je n'ai jamais utilisé ce framework, mais ton erreur dit que le paramètre passé (slug) n'est pas bon selon ton expression régulière. Par exemple, si ton expression régulière décrit ton paramètre comme ceci:

[a-z]+

Et que ton paramètre est 1 par exemple. Ce genre d'erreur va sortir puisque dans ton expression régulière tu dis que ton paramètre va contenir que des lettres de a-z.

J'espère que j'ai pu t'éclairer ^^

Essaie avec ce regex: [a-z0-9]+
EDIT PLUS BAS DANS LA PAGE

Diarill
Auteur

Bonjour et merci pour ta réponse.
J'ai essayé ce regex là mais ça n'a pas marché.
Fatal error: Uncaught Zend\Expressive\Router\Exception\RuntimeException: Parameter value for [slug] did not match the regex [a-z0-9]+ in /var/www/monFramework/vendor/zendframework/zend-expressive-fastroute/src/FastRouteRouter.php:282 Stack trace: #0 /var/www/monFramework/src/Framework/Router.php(55): Zend\Expressive\Router\FastRouteRouter->generateUri('blog.show', Array) #1 /var/www/monFramework/src/Framework/Router/RouterTwigExtension.php(28): Framework\Router->generateUri('blog.show', Array) #2 /var/www/monFramework/vendor/twig/twig/lib/Twig/Environment.php(378) : eval()'d code(55): Framework\Router\RouterTwigExtension->pathFor('blog.show', Array) #3 /var/www/monFramework/vendor/twig/twig/lib/Twig/Template.php(189): __TwigTemplate_4cd96ec0eb20be9c80765db757474cdc3869633966fc7ca581d802fe78ec117a->block_body(Array, Array) #4 /var/www/monFramework/vendor/twig/twig/lib/Twig/Environment.php(378) : eval()'d code(59): Twig_Template->displayBlock('body', Array, Array) #5 /var/www/monFramework/vendor/twig/twig/lib/Twig/Templat in /var/www/monFramework/src/Blog/views/index.twig on line 12

Tu utilises ZendFramework non?

Diarill
Auteur

oui en effet.

Désolé, erreur de ma part, j'avais pas pensé que ton slug pouvait contenir des -. Essaie comme ça:

[a-z0-9\-]+

. Pour le coup ça devrait marcher.

Diarill
Auteur

Il ne se passe rien du tout.

Fatal error: Uncaught Zend\Expressive\Router\Exception\RuntimeException: Parameter value for [slug] did not match the regex [a-z0-9\-]+ in /var/www/monFramework/vendor/zendframework/zend-expressive-fastroute/src/FastRouteRouter.php:282 Stack trace: #0 /var/www/monFramework/src/Framework/Router.php(55): Zend\Expressive\Router\FastRouteRouter->generateUri('blog.show', Array) #1 /var/www/monFramework/src/Framework/Router/RouterTwigExtension.php(28): Framework\Router->generateUri('blog.show', Array) #2 /var/www/monFramework/vendor/twig/twig/lib/Twig/Environment.php(378) : eval()'d code(55): Framework\Router\RouterTwigExtension->pathFor('blog.show', Array) #3 /var/www/monFramework/vendor/twig/twig/lib/Twig/Template.php(189): __TwigTemplate_4cd96ec0eb20be9c80765db757474cdc3869633966fc7ca581d802fe78ec117a->block_body(Array, Array) #4 /var/www/monFramework/vendor/twig/twig/lib/Twig/Environment.php(378) : eval()'d code(59): Twig_Template->displayBlock('body', Array, Array) #5 /var/www/monFramework/vendor/twig/twig/lib/Twig/Templ in /var/www/monFramework/src/Blog/views/index.twig on line 12

C'est quoi la valeur de ton slug exactement ?

Diarill
Auteur

Si je ne me trompe pas en tant que débutant, je crois c'est ça '$prefix . '/{slug:[a-z0-9-]+}-{id:[0-9]+}'; dans cette ligne de code: '$router->get($prefix . '/{slug:[a-z0-9-]+}-{id:[0-9]+}', BlogAction::class, 'blog.show');'

Ton regex pour ton slug doit être comme ceci:

[a-z0-9\-]+
Diarill
Auteur

'''
ce regex marche très bien si je mets de côté la récupération de l'id d'un article par exemple.
'''$router->get($prefix . '/slug:[a-z-0-9]', BlogAction::class, 'blog.show');'''
Mais en tenant compte du fait que je dois récupérer un article avec son id,
'''$router->get($prefix . '/{slug:[a-z0-9-]+}-{id:[0-9]+}', BlogAction::class, 'blog.show');'''
ça ne marche plus.

Diarill
Auteur

Y a t il un autre moyen plus propre qui me permette de récupérer un article et son id?
Merci pour vos réponses

Le moyen le plus propre selon moi est celui que tu utilises en ce moment.
Tes regex semblent bons, je ne connais pas assez voir pas du tout ZendFramework pour t'aider plus ...

Diarill
Auteur

Merci pour ta réponse et ton soutien.
Amicalement