Bonjour,
Je suis entraine de suivre la formation Mide en pratique avec la pdo.
https://www.grafikart.fr/formations/mise-pratique-poo
Je suis rendu à téléversé des image dans mon projet. Voila je rencontre un petit problème avec mon code.
J'ai d'afficher le dossier "uploads" dans mon nivageteur avec une url de ce type :
eee.com/uploads/posts/shop.png
Dans mes vue j'ulise une syntaxe twig:
{% if item.image %}
<img src="{{ item.Thumb }}" alt="" class="image-responsive">
{% endif %}
dans mon entité Post j'ai une function getThumb()
public function getThumb()
{
return '/uploads/posts/' . $this->image;
}
Dans mon index.php j'ai un système de middleweare :
$app = (new App('config/app.php'))
->pipe(Whoops::class)
->pipe(TrailingSlashMiddleware::class)
->pipe(MethodMiddleware::class)
->pipe(CsrfMiddleware::class)
->pipe(RouterMiddleware::class)
->pipe(DispatcherMiddleware::class)
->pipe(NotFoundMiddleware::class);
Les middlewares RouterMiddleware et DispatcherMiddleware son les derniers middleware avant d'afficher la page finale.
Je puis voir l'image shop.png dans mon nigateur.
Je tombe sur le dernier middleware NotFoundMiddleware si il y aucun middleware n'a réussit à traiter la requête. J'arrive dans ce middleware.
Le code de mon RouterMiddleware :
public function __construct(Router $router)
{
$this->router = $router;
}
public function __invoke(ServerRequestInterface $request, callable $next)
{
$route = $this->router->match($request);
if (is_null($route)) {
return $next($request);
}
$params = $route->getParams();
$request = array_reduce(array_keys($params), function ($request, $key) use ($params) {
return $request->withAttribute($key, $params[$key]);
}, $request);
$request = $request->withAttribute(get_class($route), $route);
return $next($request);
}
DispatcherMiddleware
C'est le dernier middleware qui s'ocupe de redifigé vers la bone page.
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function __invoke(ServerRequestInterface $request, callable $next)
{
$route = $request->getAttribute(Router\Route::class);
if (is_null($route)) {
return $next($request);
}
$callback = $route->getCallback();
if (is_string($callback)) {
$callback = $this->container->get($callback);
}
$response = call_user_func_array($callback, [$request]);
if (is_string($response)) {
return new Response(200, [], $response);
} elseif ($response instanceof ResponseInterface) {
return $response;
} else {
throw new \Exception('The response is not a string or an instance of ResponseInterface');
}
}
Dans ma classe Router
J'ai une method match() qui véréfie si la reqête match avec une route dans mon application :
/**
* @param ServerRequestInterface $request
* @return Route|null
*/
public function match(ServerRequestInterface $request): ?Route
{
$result = $this->router->match($request);
if ($result->isSuccess()) {
return new Route(
$result->getMatchedRouteName(),
$result->getMatchedMiddleware(),
$result->getMatchedParams()
);
}
return null;
}
Si il trouve une route il donne un objet Route :
/**
* @var string
*/
private $name;
/**
* @var callable
*/
private $callable;
/**
* @var array
*/
private $params;
/**
* Route constructor.
* @param string $name
* @param callable/string $callable
* @param array $params
*/
public function __construct(string $name, $callable, array $params)
{
$this->name = $name;
$this->callable = $callable;
$this->params = $params;
}
/**
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* @return string/callable
*/
public function getCallback()
{
return $this->callable;
}
/**
* Retrieve the params url
* @return string[] params list
*/
public function getParams(): array
{
return $this->params;
}
Je suis dans un context d'une route d'assets. Les chemain d'asset type images ne sont pas rélier à une action défini. Mon middleware panique et il ne sépas comment faire.
Merci de votre aide.