Bonjour tous le monde,

J'ai un petit soucis avec le code que grafikart a donné sur le tutoriel MVC :
https://www.grafikart.fr/formations/programmation-objet-php/mvc-model-view-controller

J'ai télécharger la source, j'ai la meme BDD mais pourtant il me met des erreurs comme quoi il ne trouve pas la function 'forbidden' et quand je vais sur le p=login , il me met 3 erreur. Le code MVC de grafikart est beugé ou pas ?

Merci de votre aide

10 réponses


Carouge10
Réponse acceptée

A mon avis, la bonne url est "p=users.login"

Bonjour,

Tu peux afficher un peut de code, la partie ou tu appelle les controller suivant l'uri ?

<?php
use Core\Auth\DBAuth;

define('ROOT', dirname(__DIR__));
require ROOT . '/app/App.php';
App::load();

if(isset($_GET['p'])){
    $page = $_GET['p'];
}else{
    $page = 'home';
}

// Auth
$app = App::getInstance();
$auth = new DBAuth($app->getDb());
if(!$auth->logged()){
    $app->forbidden();
}

ob_start();
if($page === 'home'){
    require ROOT . '/pages/admin/posts/index.php';
} elseif ($page === 'posts.edit'){
    require ROOT . '/pages/admin/posts/edit.php';
} elseif ($page === 'posts.add'){
    require ROOT . '/pages/admin/posts/add.php';
}elseif ($page === 'posts.delete'){
    require ROOT . '/pages/admin/posts/delete.php';
}elseif($page === 'categories.index'){
    require ROOT . '/pages/admin/categories/index.php';
} elseif ($page === 'categories.edit'){
    require ROOT . '/pages/admin/categories/edit.php';
} elseif ($page === 'categories.add'){
    require ROOT . '/pages/admin/categories/add.php';
}elseif ($page === 'categories.delete'){
    require ROOT . '/pages/admin/categories/delete.php';
}
$content = ob_get_clean();
require ROOT . '/pages/templates/default.php';

https://uptobox.com/lgr4jnwmbfu9

Je te met mon dossier je le supprimerais une fois le sujet clos

Bonjour,

Et tu as quoi comme erreurs ?

Pour la page login :

  • Notice: Undefined offset: 1 in C:\wamp64\www\POO\public\index.php on line 18
  • Warning: require(C:\wamp64\www\POO\app/Controller/LoginController.php): failed to open stream: No such file or directory in C:\wamp64\www\POO\app\Autoloader.php on line 24
  • Fatal error: require(): Failed opening required 'C:\wamp64\www\POO\app/Controller/LoginController.php' (include_path='.;C:\php\pear') in C:\wamp64\www\POO\app\Autoloader.php on line 24

    Pour admin :

  • Fatal error: Call to undefined method App::forbidden() in C:\wamp64\www\POO\public\admin.php on line 18

ça fait beacuoup d'erreurs en effet ^^, Peux-tu nous montrer ta page login stp, la partie du code en erreur.

Login.php

<?php if($errors): ?>
    <div class="alert alert-danger">
        Identifiants incorrects
    </div>
<?php endif; ?>

<form method="post">
    <?= $form->input('username', 'Pseudo'); ?>
    <?= $form->input('password', 'Mot de passe', ['type' => 'password']); ?>
    <button class="btn btn-primary">Envoyer</button>
</form>

index.php

<?php
define('ROOT', dirname(__DIR__));
require ROOT . '/app/App.php';
App::load();

if(isset($_GET['p'])){
    $page = $_GET['p'];
}else{
    $page = 'posts.index';
}

$page = explode('.', $page);
if($page[0] == 'admin'){
    $controller = '\App\Controller\Admin\\' . ucfirst($page[1]) . 'Controller';
    $action = $page[2];
} else{
    $controller = '\App\Controller\\' . ucfirst($page[0]) . 'Controller';
    $action = $page[1];
}
$controller = new $controller();
$controller->$action();

J'ai plus que c'est 2 erreurs sur la page login :

  • Notice: Undefined offset: 1 in C:\wamp64\www\POO\public\index.php on line 18
  • Fatal error: Method name must be a string in C:\wamp64\www\POO\public\index.php on line 21

C'est bizarre car je n'ai pas du tous changer le code de grafikart ...

Salut,
Ton erreur d'offset est logique puisque quand tu souhaites te rendre sur la page login tu as "p=login"
Donc $page[0] = "login" mais $page[1] est inexistant. Tu n'as pas d'action.
Dans ce cas si $page[1] n'existe pas alors $action devra être égale à "index" par exemple

Punaise ! J'avais oublier se detaille !!! Je suis un boulet ! Merci