Trying to access array offset on value of type bool

Par Wilnbsi, il y a 3 ans


Bonsoir j'ai un message d'erreur a la ligne $match
Voici ma classe Router

public function url (string $name, array $params = []) { return $this->router->generate($name, $params); } public function run (): self { $match = $this->router->match(); $view = $match['target']; $router = $this; ob_start(); require $this->viewPath . DIRECTORY_SEPARATOR . $view . '.php'; $content = ob_get_clean(); require $this->viewPath . DIRECTORY_SEPARATOR . 'layouts/default.php'; return $this; }

Mon index.php

$query = http_build_query($get); if(!empty($query)) { $uri = $uri . '?' . $query; } header('Location: ' . $uri); http_response_code(301); exit(); }// si on a un numero de page qui est egale a 1 il faut supprimer et le rediriger vers home // si l'utilisateur entre ?page=1 redirige le vers le home $whoops = new \Whoops\Run; $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler); $whoops->register(); $router = new Router(dirname(__DIR__) . '/views'); $router ->get('/', 'post/index', 'home') ->get('/blog/[*:slug]-[id]', 'post/show', 'post') ->get('/blog/category', 'category/show', 'category') ->run();

Ce que je veux

Je veux pouvoir acceder a ma page show mais j'ai cet erreur la

Ce que j'obtiens
Trying to access array offset on value of type bool

12 réponses

beni1880, il y a 3 ans

Salut, est-ce que tu peux débugger ce que retourne $this->router->match() ?

Wilnbsi, il y a 3 ans

le debug donne

^False
beni1880, il y a 3 ans

Ok, du coup le clé "target" n'existe pas, je pense que tu t'attends à ce que la méthode match() du router te retourne un truc dans le genre "['target' => 'value']" mais la ça ne te retourne rien. Il faudrait voir au niveau de cette méthode match() ce qui se passe.
Après, je suis aussi débutant ^^ mais c'est par là que j'aurai commencer pour débugger ça.

Carouge10, il y a 3 ans

Bonjour,
Quelle est ton url ?

Wilnbsi, il y a 3 ans

Justement , malgre le fait que j'ai regarde la methode match(), je n'ai pas debloquer la situation

beni1880, il y a 3 ans

Tu pourrais poster ta methode ici ? Et aussi un apperçu de tes routes ?

Wilnbsi, il y a 3 ans

Ma classe Router

<?php namespace App; class Router { /** * @var string */ private $viewPath; /** * @var \AltoRouter */ private $router; public function __construct(string $viewPath) { $this->viewPath = $viewPath; $this->router = new \AltoRouter(); } public function get (string $url, string $view, ?string $name = null) { $this->router->map('GET', $url, $view, $name); return $this; } public function url (string $name, array $params = []) { return $this->router->generate($name, $params); } public function run (): self { $match = $this->router->match(); $view = $match['target']; $params = $match['params']; $router = $this; ob_start(); require $this->viewPath . DIRECTORY_SEPARATOR . $view . '.php'; $content = ob_get_clean(); require $this->viewPath . DIRECTORY_SEPARATOR . 'layouts/default.php'; return $this; } }

index.php

<?php use App\Router; require '../vendor/autoload.php'; $title = 'Home'; define ('DEBUG_TIME', microtime(true)); if(isset($_GET['page']) && $_GET['page'] === '1') { // reecrire l'url sans le parametre $uri = explode('?', $_SERVER['REQUEST_URI'])[0]; $get = $_GET; unset($get['page']); $query = http_build_query($get); if(!empty($query)) { $uri = $uri . '?' . $query; } header('Location: ' . $uri); http_response_code(301); exit(); }// si on a un numero de page qui est egale a 1 il faut supprimer et le rediriger vers home // si l'utilisateur entre ?page=1 redirige le vers le home $whoops = new \Whoops\Run; $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler); $whoops->register(); $router = new Router(dirname(__DIR__) . '/views'); $router ->get('/', 'post/index', 'home') ->get('/blog/[*:slug]-[id]', 'post/show', 'post') ->get('/blog/category', 'category/show', 'category') ->run();

j'accede a d'autres pages mais des que j'ai envie d'acceder a localhost:8000/blog/views/show.php show.php se retrouvant dans le meme dossier que post/index

j'ai ce message en haut Trying to access array offset on value of type bool

beni1880, il y a 3 ans

Carouge10 a posé une bonne question, c'est quoi l'URL que tu veux accédé ?

beni1880, il y a 3 ans

Il ne manquerai pas l'ID ? get('/blog/[*:slug]-[id]', 'post/show', 'post') tu passes deux paramètres ici, le slug et l'ID. Ou peut-être qu'il ne comprend pas "[*:slug]-[id]"

Wilnbsi, il y a 3 ans

je vois laisse moi verifier

Wilnbsi, il y a 3 ans

merci beni1880 en effet c'etait get('/blog/[*:slug]-[i:id]', 'post/show', 'post')

hahah vraiment j'ai meme eclate de rire,

Merci encore et ce qui me trompait c'est quand whoops affiche l'erreur au lieu de montrer directement ou est le probleme il te pointe juste la methode