Hello Guiguiwuip,
Merci à toi pour la réponse ;)
J'ai commenté "cas spéciaux des actions de login et de logout" par contre "en ajoutant des routes, puis en désactivant l'autoRedirect du login membres" que veux-tu dires par là qu'elles genres de routes et où se trouve autoredirect du login membres :D
Je te copie/colle les fichiers pour que tu vois un peu le dallage :
app/Config/core.php :
Configure::write('Routing.prefixes', array('mtadmin451','customers'));
app/Config/routes.php :
Router::connect(
'/mtadmin451', array('controller' => 'users', 'action' => 'home', 'prefix' => 'mtadmin451','admin'=> true)
);
Router::connect(
'/customers', array('controller' => 'customers', 'action' => 'home', 'prefix' => 'customers','customers'=> true)
);
app/Controller/AppController.php :
<?php
App::uses('Controller', 'Controller');
class AppController extends Controller {
var $helpers = array('Html', 'Form', 'Text', 'Session');
var $components = array('AppAuth','Session');
function beforeRender() {
if (!empty($this->request->params'prefix'])) {
$this->layout = $this->request->params'prefix'];
}
}
}
?>
app/Controller/Component/AppAuthComponent.php :
<?php
App::import('Component', 'Auth');
class AppAuthComponent extends AuthComponent {
/**
* Configuration par défaut
*
* @var array
*/
var $defaults = array(
'userModel' => 'User',
'userScope' => array(null),
'fields' => null,
'loginAction' => null,
'loginRedirect' => null,
'logoutRedirect' => null,
'autoRedirect' => true,
'loginError' => "Identifiant ou mot de passe incorrects.",
'authError' => "Vous n'avez pas accès à cette page.",
'flashElement' => 'default',
);
/**
* Configurations possibles en fonction du préfixe de la route
*
* @var array
*/
var $configs = array(
'mtadmin451' => array(
'userModel' => 'User',
'userScope' => array('User.isValid' => 0),
'fields' => array('username' => 'login', 'password' => 'password'),
'loginAction' => array('controller' => 'users', 'action' => 'login', 'admin' => false),
'loginRedirect' => array('controller' => 'users', 'action' => 'home', 'admin' => true),
'logoutRedirect' => array('controller' => 'users', 'action' => 'login', 'admin' => false),
'flashElement' => 'admin_notice',
),
'customers' => array(
'userModel' => 'Customer',
'userScope' => array('Customer.isValid' => 0),
'fields' => array('username' => 'email', 'password' => 'password'),
'loginAction' => array('controller' => 'customers', 'action' => 'login', 'customers' => false),
'loginRedirect' => array('controller' => 'customers', 'action' => 'home', 'customers' => true),
'logoutRedirect' => array('controller' => 'customers', 'action' => 'login', 'customers' => false),
'flashElement' => 'public_notice'
),
);
/**
* Démarrage du composant.
* Autorisation si pas de préfixe dans la Route qui a conduit ici.
*
* @param object $controller Le contrôleur qui a appelé le composant.
*/
function startup(&$controller) {
$prefix = null;
if (empty($controller->params'prefix'])) {
$this->allow();
} else {
$prefix = $controller->params'prefix'];
}
// Cas spécial des actions de login et logout, pour lesquelles le préfixe n'existe pas
/*
if(in_array($controller->action, array('login', 'logout')))
{
switch($controller->name)
{
case 'Users':
$prefix = 'mtadmin451';
break;
case 'Customers':
$prefix = 'customers';
break;
}
}
*/
$this->_setup($prefix);
parent::startup($controller);
}
/**
* Définition des variables de config en fonction d'un préfixe
*
* @param string $prefix
*/
function _setup($prefix) {
$settings = $this->defaults;
if (array_key_exists($prefix, $this->configs)) {
$settings = array_merge($settings, $this->configs$prefix]);
}
$this->_set($settings);
}
}
?>
app/Controller/CustomersController.php :
<?php
App::uses('AppController', 'Controller');
/**
* Customers Controller
*
* @property Customer $Customer
*/
class CustomersController extends AppController {
var $name = "Customers";
function customers_home(){
$this->layout = 'customers';
}
function login(){
}
function logout(){
$this->redirect($this->AppAuth->logout());
}
/* .... */
}
?>
app/Controller/UsersController.php :
<?php
App::uses('AppController', 'Controller');
/**
* Users Controller
*
* @property User $User
*/
class UsersController extends AppController {
var $name = "Users";
public function mtadmin451_home() {
$this->layout = 'mtadmin451';
}
function login(){
}
function logout(){
$this->redirect($this->AppAuth->logout());
}
/* .... */
}
?>
et les vues de formulaires login.ctp dans dans leurs réperetoires respectifs app/Views/Users/ et app/Views/Customers
Mes problèmes :
Quand j'attaque l'url http://localhost/appcakecommande/mtadmin451 ça me redirige bien vers http://localhost/appcakecommande/users/login.
Quand j'attaque l'url http://localhost/appcakecommande/customers ça me redirige bien vers http://localhost/appcakecommande/customers/login avec l'erreur du LoginController suivante :
Missing Controller
Error: LoginController could not be found.
Error: Create the class LoginController below in file: app\Controller\LoginController.php
<?php class LoginController extends AppController {} ?>
en faisant un var_dump de $controller dans la fonction startup :
var_dump($controller);
if (empty($controller->params'prefix'])) {
$this->allow();
} else {
$prefix = $controller->params'prefix'];
}
je m'aperçois que le controller et l'action ne sont pas bon
...
public 'request' =>
object(CakeRequest)[9]
public 'params' =>
array (size=7)
'plugin' => null
'controller' => string 'login' (length=5)
'action' => string 'customers_index' (length=15)
'named' =>
array (size=0)
...
'pass' =>
array (size=0)
...
'prefix' => string 'customers' (length=9)
'customers' => boolean true
...
Bref, je suis toujours dans les choux ça m'rend dingue :D
Merci à toi ;)