Bonjour,

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

Ce que je fais

Bonjour cher tous. Heureux de vous retrouver.
Suis coincé et ai besoin de votre majestueuse pour résoudre un problème dans mon code.

<?php
namespace App\Blog;

use Framework\Module;
use App\Framework\Renderer\RendererInterface;
use Framework\Router;
use Psr\Http\Message\ServerRequestInterface as Request;

class BlogModule extends Module
{

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

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

    public function index(Request $request): string
    {
        return $this->renderer->render('@blog/index');
    }

    public function show(Request $request): string
    {
        return $this->renderer->render('@blog/show', [
            'slug' => $request->getAttribute('slug')
        ]);
    }
}

Ce que je veux

Lancer ma page sur le navigateur et que ça marche.

Ce que j'obtiens

Fatal error: Uncaught TypeError: Argument 2 passed to App\Blog\BlogModule::construct() must be an instance of Framework\Router, string given, called in /var/www/monFramework/vendor/php-di/php-di/src/Definition/Resolver/ObjectCreator.php on line 146 and defined in /var/www/monFramework/src/Blog/BlogModule.php:14 Stack trace: #0 /var/www/monFramework/vendor/php-di/php-di/src/Definition/Resolver/ObjectCreator.php(146): App\Blog\BlogModule->construct('prefix', '/blog', Object(App\Framework\Renderer\TwigRenderer)) #1 /var/www/monFramework/vendor/php-di/php-di/src/Definition/Resolver/ObjectCreator.php(73): DI\Definition\Resolver\ObjectCreator->createInstance(Object(DI\Definition\AutowireDefinition), Array) #2 /var/www/monFramework/vendor/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php(64): DI\Definition\Resolver\ObjectCreator->resolve(Object(DI\Definition\AutowireDefinition), Array) #3 /var/www/monFramework/vendor/php-di/php-di/src/Container.php(377): DI\Definition\Resolver\ResolverDispatcher->resolve(Object(DI in /var/www/monFramework/src/Blog/BlogModule.php on line 14

2 réponses


Warzik
Réponse acceptée

Salut,
je te conseil en premier lieu de lire ton erreur, car ton erreur t'expliques ce qu'il se passe, elle dit qu'elle attendait une instance de Router et qu'elle a obtenu une chaîne de caractère donc en l'occurence le prefix du module.
Donc dans le fichier config.php de ton module il faut que tu définisses comment doit-être instancier ton BlogModule, regarde:

BlogModule::class => object()->constructorParameter('prefix', '/blog')

En espérant t'avoir aidé :)

Diarill
Auteur

Merci Shouky pour ta réponse. C'est exactement là que se trouvait mon problème. Je pense que je devrais simuler des erreures dans mes codes pour apprendre à interpréter les messages d'erreures qui s'affichent sur le navigateur; un peu comme cela se fait en mécanique ou en électronique.