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


Kareylo
Réponse acceptée

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');
}

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

devpro
Auteur

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

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
Auteur

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

devpro
Auteur

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

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