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


Carouge10
Réponse acceptée

Bonjour,
Quelle est ton url ?

beni1880
Réponse acceptée

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]"

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

Wilnbsi
Auteur

le debug donne

^False

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.

Wilnbsi
Auteur

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

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

Wilnbsi
Auteur

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

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

Wilnbsi
Auteur

ceci http://localhost:8000/blog/sit-at-doloremque-vel- sit-at-doloremque-vel- etant l'url de l'article sur le profil du blog

Wilnbsi
Auteur

je vois laisse moi verifier

Wilnbsi
Auteur

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