Bonjour monsieur,

Merci pour votre passion d’enseignement GRAFIKART, j’ai beaucoup appris
Je suis à mon deuxième jour entrain de trouver une solution mais en vin
J’avais une erreur dont :
Fatal error: Function name must be a string in C:\wamp64\www\ImpactJob\public\index.php on line 18
Là je suis au bout de mes force car j’ai pratique toutes les propositions qui sont sur les commentaires je n’arrive pas
La premiere proposition etais de faire

<?php
$match = $router->match();
if ($match)
    $match['target']();
    ?>

Ma page ne donne plus d’erreur mais une page blanch
Sur mon terminal j’ai une error : Invalid request (Unexpected EOF)
je viens de faire le l’autres solution qui est de créer fichier .htaccess
avec comme

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . public/index.php [L]

Toujours rien
Svp , j’ai besoin d’aide

11 réponses


Bonjour,

Au lieu de faire "$match['target']();"
Essaie avec "call_user_function($match['target']);"

Si ta fonction est contenu dans un object. Par exemple : MaClasse::MaMethodStatic(). La syntaxe changera un peu :
call_user_function(["MaClasse", "MaMethodStatic']);

Le 2e argument de call_user_function() est utile lorsque tu veux injecter des paramètres à ta méthode :
call_user_function($match['target'], $_GET["xxx"]);

Vérifie également que $match["target"] contient bien une chaine de caractère. (vu l'erreur, ce n'est pas le cas).
var_dump($match["target"]); pourrait t'aider...

michael@
Auteur

Merci pour votre proposition @Cybercraft

apres la mise en pratique.
var_dump($match["target"]) me donne :NULL

comment je fais pour recupper quelques chose?

Je t'envoi le code précédent mais corrigé. (voir plus bas)

Si $match['target'] est null... C'est que le router n'a rien "matché".

Peux-tu mettre le code complet de "index.php" ? (en enlevant les données sensibles).

$match = $router->match();

if (!is_null($match['target'])) {
    call_user_function($match['target']);
}
michael@
Auteur

voici mon index.php qui est dans le public

<?php 
require '../vendor/autoload.php';

$router = new AltoRouter();

define('PATH', dirname(__DIR__) . '/views');

$router->map('GET', '/home', function () {
    require  PATH . '/home/index.php';
});

$router->map('GET', '/blog', function () {
    require  PATH . '/post/index.php';
});

$match = $router->match();

if($match && !is_null($match['target'])){
    call_user_function($match['target']);
}

var_dump($match["target"]);

Bonsoir,
Pour mettre en forme le code il faut utiliser le code "markdown"
D'où sort la constante "DIR" ?
Qu'elle l'url de la page "blanche" ?
Active les erreurs PHP ou consulte les logs

michael@
Auteur

D'où sort la constante "DIR" ? ===> permet de remonté d'un grans dans le dossier /views

Qu'elle l'url de la page "blanche" ? ===> toutes les page

@michael@ :
je parlais de "DIR" " et non _DIR_,(éditer sinon le site me corrige), il a éditer son message entre temps
Et a qu'elle moment il site que c'est toutes les pages ?

michael@
Auteur

pouvez proposer une solution , le code esst ci-haut.

au temps pour moi, je n'avais pas vu que tu étais l'auteur et ne comprennais pas la réponse

cela ne me dit toujours pas qu'elle est l'url

michael@
Auteur

l'Url est charger par

$router->map('GET', '/home', function () {
    require  PATH . '/home/index.php';
});

après avoir signaler dans mon terminal que : document>traverse> PHP -S localhost:5500 -t public

celui-ci lui demande d'aller charger la page index.php dans ```/home

michael@
Auteur

je suis toujours en attante de quelqu'un qui vois mieux que moi.