Bonjour , j'ai repris un tuto de grafikart en php mais je suis bloque au niveau du message afficher sur titre, j'ai beau utiliser #[AllowDynamicProperties] mais le message s'affiche toujours

<?php
class Router {

    /** 
    * Permet de parser une url
    * @param $url Url a parser
    * @return Tableau contenant les parametres
    **/
    /*static function parse($url, $request)
    {
       $url = trim($url, '/');
       $params = explode('/', $url);
       $request = array (
            'controller' => $params[0],
            'action' => isset($params[1]) ? $params[1] : 'index'
       );
       $request['params'] = array_slice($params, 2);
       return true;
    }*/

    public static function parse($url, $request)
    {
       $url = trim($url, '/');
       $params = explode('/', $url);
       $request->controller = $params[0];
       $request->action = isset($params[1]) ? $params[1] : 'index';
       $request->params = array_slice($params, 2);

       return true;
    }

}
<?php 
class Dispatcher {

    var $request;

    function __construct()
    {
        $this->request = new Request();
        Router::parse($this->request->url, $this->request);
        print_r($this->request);
    }
}

Ce que je veux

comment faire diparaitre message, car je pense que la version de 8.2 ne le permet pas et je ne peux non plus desactiver le error_reporting

5 réponses


Glioburd
Réponse acceptée

C'est écrit dans les messages, ta classe Request n'a pas de propriété controller, action et params :

class Request {

    public $url;  //  URL appelle par l'utilisateur
    public $controller;
    public $action;
    public $params;

    function __construct()
    {
       $this->url = $_SERVER['PHP_SELF'];
    }
}

Hello, à quel niveau tu as ce message dans le code ?
Ca vient probablement de ta class Request, il faudrait que tu nous la montre :)

Tu fais un new Request(), sa propriété url existe t-elle ? A t-elle une valeur par défaut ? Si non, là tu met un argument null au niveau de

Router::parse($this->request->url, $this->request);

Ta classe Request a bien une propriété controller, action et params ?

Aussi, prend la bonne habitude de typer tes propriétés, les paramètres des méthodes et fonctions, ainsi que leur valeur de retour, genre :

class Foo
{
    private int $bar = 0;

    public function getBar(): int
    {
        return $this->bar;
    }

    public function getBarWithCustomMessage(string $message): string
    {
        return "$message : $this->bar";
    }
}

Ca évite des mauvaises surprise + tard !

Wilnbsi
Auteur

Voici ma classe Request

<?php
class Request {

    public $url;  //  URL appelle par l'utilisateur

    function __construct()
    {
       $this->url = $_SERVER['PHP_SELF'];
    }
}

ensuite ma classe Dispatcher

<?php 
class Dispatcher {

    var $request;

    function __construct()
    {
        $this->request = new Request();
        Router::parse($this->request->url, $this->request) ?? null;
        print_r($this->request);
    }
}

?>

et enfin ma classe Router

<?php
 class Router {

    /** 
    * Permet de parser une url
    * @param $url Url a parser
    * @return Tableau contenant les parametres
    **/

    public static function parse($url, $request)
    {
       $url = trim($url, '/');
       $params = explode('/', $url);
       $request->controller = $params[0];
       $request->action = isset($params[1]) ? $params[1] : 'index';
       $request->params = array_slice($params, 2);

       return true;
    }

}

Et index.php

<?php

require_once 'elements/header.php'; 
require_once 'wilfred/includes.php';

define ('JONAPACK', dirname(__FILE__));
define ('ROOT', dirname(JONAPACK));
define ('DS', DIRECTORY_SEPARATOR);
define ('WILFRED', ROOT.DS.'wilfred');
define ('BASE_URL', dirname(dirname($_SERVER['SCRIPT_NAME'])));

new Dispatcher();
?>

<?php require_once 'elements/footer.php'; ?>

Voici le message d'erreur
(https://drive.google.com/file/d/1103ZN-GGaorY7amGpHSeInbST_hO-mT3/view?usp=share_link)

Wilnbsi
Auteur

Merci beaucoup, nous les debutants il ya des trucs qu'on ne voit pas vite

De rien ! Oui c'est normal :)
Mais la plupart du temps, les erreures sont assez explicites, il ne faut pas paniquer sur une page d'erreur, souvent elle t'indique exactement où ça se passe mal :D. Comme ici !