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
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 !
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)
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 !