Bonjour,
Je suis actuellement le tutoriel de Grafikart : Le Router - Mise en pratique de la POO en Php"
https://www.grafikart.fr/tutoriels/router-919
Voila je rencontre un petit problème avec mon code.
Je rencontre cette erreur :
Fatal error: Uncaught TypeError: Argument 3 passed to Components\Router::get() must be an instance of Components\srting, string given, called in C:\xampp\htdocs\Frame\Framework\Blog\BlogModule.php on line 11 and defined in C:\xampp\htdocs\Frame\Components\Router.php:27 Stack trace: #0 C:\xampp\htdocs\Frame\Framework\Blog\BlogModule.php(11): Components\Router->get('/blog', Array, 'blog.index') #1 C:\xampp\htdocs\Frame\Components\App.php(24): Framework\Blog\BlogModule->__construct(Object(Components\Router)) #2 C:\xampp\htdocs\Frame\public\index.php(6): Components\App->__construct(Array) #3 {main} thrown in C:\xampp\htdocs\Frame\Components\Router.php on line 27
Je ne comprend vraiment pas pourquoi...
J'ai pourtant bien fait comme Grafikart.
Voici mon router :
<?php
namespace Components;
use Components\Router\Route;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Expressive\Router\FastRouteRouter;
use Zend\Expressive\Router\Route as ZendRoute;
/**
* Class router
* Register a match routes
*/
class Router {
private $router;
public function __construct() {
$this->router = new FastRouteRouter();
}
/**
* @param string $path
* @param callable $callable
* @param string $name
*/
public function get(string $path, callable $callable, srting $name) {
$this->router->addRoute(new ZendRoute($path, $callable, ['GET'], $name));
}
/**
* @param ServerRequestInterface $request
* @return Route/null
*/
public function match(RequestInterface $request): ?Route {
$result = $this->router->match($request);
if ($result->isSuccess()) {
return new Route(
$result->getMatchRouteName(),
$result->getMatchedMiddleware(),
$result->getMatchedParams()
);
}
return null;
}
public function generateUri(string $name, array $params): ?string {
return $this->router->generateUri($name, $params);
}
}
BlogModule.php
<?php
namespace Framework\Blog;
use Components\Router;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class BlogModule {
public function __construct(Router $router) {
$router->get('/blog', [$this, 'index'], 'blog.index');
$router->get('/blog/{slug:[a-z\-]+}', [$this, 'show'], 'blog.show');
}
public function index(Request $request): string {
return '<h1>Bienvenue sur le blog !</h1>';
}
public function show(Request $request): string {
return '<h1>Bienvenue sur l\'article ' . $request->getAttribute('slug') . '</h1>';
}
}
Si vous remarquez que les namespace sont différents que ceux du tuto, c'est normal. C'est parce que j'ai juste refait l'architecture à mon goût.
Je vous remercie pour toute l'aide que vous pourriez m'apporter.
Bonne soirée à vous.
Cordialement,