Erreur must be a string

Par devpro, il y a 5 ans


Bonjour,

Voila je rencontre un petit problème avec mon code, je suis les cours de php je suis au chapitre 45 mais je rencontre des probleme a la creation de la structure du projet.
a l'instalation de altorouteur j'ai tout fait comme indiquer mais il me renvoie cette erreur ci-dessous:

Fatal error: Uncaught Error: Function name must be a string in /Applications/MAMP/htdocs/sitephp2/public/index.php:17 Stack trace: #0 {main} thrown in /Applications/MAMP/htdocs/sitephp2/public/index.php on line 17

voici mon code:

require '../vendor/autoload.php'; $router = new AltoRouter(); define('VIEW_PATH', dirname(__DIR__) . '/views'); $router->map('GET', '/blog', function () { require VIEW_PATH . '/post/index.php'; }); $router->map('GET', '/blog/category', function () { require VIEW_PATH . '/category/show.php'; }); $match = $router->match(); $match['target']();

cela fait maintenant plus de 2 semaine que je bloque Merci d'avance pour vos reponse.

7 réponses

devpro, il y a 5 ans

je vous remercie tout les 2 grace a cette manipulation tout est rentrer dans l'ordre.

Carouge10, il y a 5 ans

Bonjour,
comme le dit la doc, $match['target'] est un objet....

devpro, il y a 5 ans

merci de ta reponse , comment je peux remedier a mon probleme ?

Carouge10, il y a 5 ans

suffit de lire la doc

$router = new AltoRouter(); // map homepage $router->map( 'GET', '/', function() { require __DIR__ . '/views/home.php'; }); // map user details page $router->map( 'GET', '/user/[i:id]/', function( $id ) { require __DIR__ . '/views/user-details.php'; }); // match current request url $match = $router->match(); // call closure or throw 404 status if( is_array($match) && is_callable( $match['target'] ) ) { call_user_func_array( $match['target'], $match['params'] ); } else { // no route was matched header( $_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found'); }
devpro, il y a 5 ans

je suis debutant desoler je ne vois toujours pas d'ou vient l'erreur.

Kareylo, il y a 5 ans

Tu appelles un objet comme si c'était une fonction.

Tu dois donc utiliser une méthode native pour appeler la bonne méthode.

Voici le bout de code par lequel tu dois remplacer ton $match['target']() :

if( is_array($match) && is_callable( $match['target'] ) ) { call_user_func_array( $match['target'], $match['params'] ); } else { header( $_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found'); }
merciful, il y a 5 ans

STP il faut valider que le sujet est resolu.Merci.