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
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]"
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.
Justement , malgre le fait que j'ai regarde la methode match(), je n'ai pas debloquer la situation
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
ceci http://localhost:8000/blog/sit-at-doloremque-vel- sit-at-doloremque-vel- etant l'url de l'article sur le profil du blog
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