Маршрутизация и переадресация раздела администратора CakePHP

Я борюсь с концепцией создания раздела admin в CakePHP-проекте. (версия 2.3.5)

Я раскоментировал строку в Config / core.php:

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

Я добавил строку в Config / routes.php: (Так же, как они советуют делать в кулинарной книге CakePHP.)

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

В AppController.php у меня есть следующее:

  public $components = array( 'Session', 'Auth' => array( 'loginRedirect'=>array('controller'=>'pages','action'=>'index', 'admin'=>true), 'logoutRedirect'=>array('controller'=>'pages','action'=>'display','home'), 'authError'=>'you have no access.', 'authorize'=>array('Controller') ) ); 

Затем я добавил макет View / Pages / admin_index.ctp, в который я хочу перенаправить после входа в систему. Мне удалось войти в систему UsersController.php.

Итак, вопрос в том, где я должен перенаправить в AppController.php, чтобы получить зарегистрированный администратор admin_view? Я считаю, что loginRedirect как-то сломан.

Я изучил некоторые учебники по этому предмету, но я нашел только этот Youtube-видео http://www.youtube.com/watch?v=zvwQGZ1BxdM. Все другие учебники, похоже, касаются более ранних версий CakePHP.

Я думаю, вы можете установить loginAction в AppController, а затем внутри этого действия, которое вы могли бы сделать:

 $this->redirect(array('controller'=>'someController','action'=>'someAction','admin'=>true)); 

попробуй это

  public $components = array( 'Auth' => array( 'autoRedirect' => false, 'loginRedirect' => array( 'admin' => true, 'controller' => 'dashboard', 'action' => 'index', ), 'loginAction' => array( 'controller' => 'users', 'action' => 'login', 'admin' => false, 'plugin' => false, ), ), ); // Now the before Filter which tells it its okay to go to index/view/or display actions. public function beforeFilter() { // Allow public views $this->Auth->allow('index', 'view', 'display'); } 

для входа в систему вы сделаете что-то вроде этого:

  public function login() { $this->set('title_for_layout', 'User Sign In'); if ($this->request->is('post') || $this->request->is('put')) { if ($this->Auth->login()) { return $this->redirect($this->Auth->redirect()); } else { $this->Session->setFlash('Username or password is incorrect', 'flash_bad'); } } } 

любые методы, к которым вы хотите получить доступ, будут иметь публичную функцию admin_index, admin_view admin_settings и т. д., так что в контроллере виджетов маршрут будет / admin / widgets / index / admin / widgets / index и т. д. и т. д. Уловка, позволяющая другим страницам отображаться без авторизации, просто помещает $ this-> Auth-> allow в beforeFilter.

У меня есть другое решение. Панель администратора для веб-сайта имеет другую графику, javasctipt и т. Д., Поэтому я использую в своих папках приложения:

 app_name +Model +Plugin +admin +front 

Да, администратор находится в другой папке, поэтому я могу, например, установить еще один cookie для входа в админ-зону, только плагины и модель одинаковы. Эта структура папок нуждается в некоторой конфигурации в bootstrap.php:

  App::build(array( 'Plugin' => array(ROOT . DS . 'Plugin' . DS), 'Model' => array(ROOT . DS . 'Model' . DS), 'Model/Behavior' => array(ROOT . DS . 'Model' . DS . 'Behavior' . DS), )); 

Возможно, это безумие для вас, но я предпочитаю это решение, использующее маршруты администратора.

Попробуй это

Ваша конфигурация / routes.php

Router::connect('/', array('controller' => 'users', 'action' => 'dashboard' ));

AppController

 class AppController extends Controller { public $components = array( 'Acl', 'Session', 'Auth' => array( 'authenticate' => array( 'Form' => array( 'userModel' => 'User', 'fields' => array( 'username' => 'user_name', 'password' => 'password' ) ) ), 'loginAction' => array('controller' => 'users', 'action' => 'login'), 'loginRedirect' => array('controller' => 'users', 'action' => 'mysettings'), 'logoutRedirect' => array('controller' => 'users', 'action' => 'login'), 'authError' => 'You don\'t have access here.', /* 'loginAction' => array('controller' => 'users', 'action' => 'forgot_password'), 'loginRedirect' => array('controller' => 'users', 'action' => 'dashboard'), 'logoutRedirect' => array('controller' => 'users', 'action' => 'forgot_password'), 'authError' => 'You don\'t have access here.', */ ), ); 

UserController

 class UsersController extends AppController { /** * Components * * @var array */ public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow('login','logout'); } } из class UsersController extends AppController { /** * Components * * @var array */ public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow('login','logout'); } }