我正在努力在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-video http://www.youtube.com/watch?v=zvwQGZ1BxdM所有其他教程似乎都与早期版本的CakePHP有关。
答案 0 :(得分:1)
我猜您可以在AppController中设置loginAction,然后在此操作中执行以下操作:
$this->redirect(array('controller'=>'someController','action'=>'someAction','admin'=>true));
答案 1 :(得分:0)
试试这个
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等等等等等等等等等等等等。上。允许在没有auth的情况下呈现其他页面的技巧只是在beforeFilter中放置$ this-> Auth-> allow。
答案 2 :(得分:0)
我有另一个解决方案。网站的管理员面板有另外的图形,javasctipt等,所以我在我的app文件夹中执行:
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),
));
也许对你来说很疯狂,但我更喜欢这种使用管理路线的解决方案。
答案 3 :(得分:0)
试试这个
您的config / 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');
}
}