Salut tout le monde, je suis en train de refaire mon site, il s'agit d'un portfolio, je suis donc le tuto sur la création de portfolio de grafikart en utilisant cakePHP.

Je rencontre deux problèmes.

Le premier c'est que je n'arrive pas à acceder à mes pages admins. Pourtant dans le core j'ai bien ajouté la ligne suivante

Configure::write('Routing.prefixes', array('admin'));

Dans mon AppController j'ai bien

'authorize' => array('Controller')

Ainsi que

public function isAuthorized($user) {
    if (isset($user['role']) && $user['role'] === 'admin') {
        return true;
    }
    return false;
}

J'ai bien vérifié grâce au DebugKit que ma session été créé je présume donc je suis logé.

Au final je me retrouve avec cette erreur

Error: AdminController could not be found.

Quand je tente d'acceder à http://127.0.0.1:8080/Perso_Cake/admin/portfolios/edit
j'ai bien une fonction

    public function admin_edit($id=null){

    }

dans mon PortfoliosController.php ainsi que la vue qui va avec.

Merci d'avance pour votre aide, je me demande si je n'aurais pas oublier quelque chose dans le router mais normalement je n'ai rien à rajouter?

2 réponses


Bonsoir.
Qu'est-ce que tu as mis dans le routing et dans tes liens HTML ?
Tes vues correspondants aux actions pour l'admin, elles sont bien préfixés par admin_* ?
Tu devrais aussi vérifier le prefix.
Comme ceci par exemple :

public function isAuthorized($user = null) {
    // Chacun des utilisateur enregistré peut accéder aux fonctions publiques
    if (empty($this->request->params['admin'])) {
        return true;
    }

    // Seulement les administrateurs peuvent accéder aux fonctions d'administration
    if (isset($this->request->params['admin'])) {
        return (bool)($user['role'] === 'admin');
    }

    // Par défaut n'autorise pas
    return false;
}

Source : Authentification » Utilisation de ControllerAuthorize.

gr4ph0s
Auteur

Merci de ta réponse. Je n'est pas touché au routing. J'ai juste rajouté dans le core

Configure::write('Routing.prefixes', array('admin'));

Mais dans la vidéo cela fonctionne, il ne touche à aucun moment au routing.

En prenant le même exemple de : http://127.0.0.1:8080/Perso_Cake/admin/portfolios/edit
j'ai bien une vue ce nomment admin_edit.ctp dans mon dossier Portfolios dans le dossier View.

Mon message d'erreur est le suivant.

MISSING CONTROLLER
Error: AdminController could not be found.
Error: Create the class AdminController below in file: app\Controller\AdminController.php
<?php
class AdminController extends AppController {

}
Notice: If you want to customize this error message, create app\View\Errors\missing_controller.ctp
STACK TRACE
APP\webroot\index.php line 118 → Dispatcher->dispatch(CakeRequest, CakeResponse)

Comme si au lieux de prendre le controleur portfolios il attendais un controlleur admins.

Merci de ta réponse en tout cas et pas bête le coup du bool :)

EDIT :
Bon en rajoutant ceci dans routes.php ça fonctionne

    Router::connect('/Portfolios/edit', array('controller' => 'Portfolios', 'action' => 'index', 'admin' => true));

Après ce n'est pas exactement ce que je cherchais a faire car la du coup je n'utilise pas de préfix mais j'utilise http://127.0.0.1:8080/Perso_Cake/Portfolios/admin_edit qui est accessible uniquement par les admins.

Mais ceci m'oblige à rajouter une route pour chaque page d'administration...

EDIT 2:
En rajoutant

    Router::connect('/admin/*', array('controller' => 'Portfolios', 'action' => 'admin_edit', 'admin' => true));

Ceci fonctionne mais n'y a t'il pas un moyen pour que mes actions commençant par admin soit pas défaut dans mon routing?
Car la je dois ajouter chaque page manuellement...