regex `[a-z\-0-9]+`

Par Diarill, il y a 8 ans


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

WebD, il y a 8 ans

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 ^^

WebD, il y a 8 ans

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

Diarill, il y a 8 ans

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

WebD, il y a 8 ans

Tu utilises ZendFramework non?

Diarill, il y a 8 ans

oui en effet.

WebD, il y a 8 ans

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, il y a 8 ans

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

WebD, il y a 8 ans

C'est quoi la valeur de ton slug exactement ?

Diarill, il y a 8 ans

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');'

WebD, il y a 8 ans

Ton regex pour ton slug doit être comme ceci:

[a-z0-9\-]+
Diarill, il y a 8 ans

'''
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, il y a 8 ans

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

WebD, il y a 8 ans

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, il y a 8 ans

Merci pour ta réponse et ton soutien.
Amicalement