Session 尝试访问控制器时使用CakePHP登录
我对一个老师让我修改的web应用程序有问题,问题是我不知道cakePHP,我一直有问题。在阅读了很多之后,我想我已经掌握了框架的基本知识。我现在的问题是,我在视图中有一个链接,所以我调用控制器中的一个函数来从模型中检索数据,问题是每次我尝试访问该函数时,应用程序都会让我登录,而我的想法是它不应该。 我不知道cakePhp上的会话处理是如何工作的,所以我请求一些帮助。 控制器的代码如下所示:Session 尝试访问控制器时使用CakePHP登录,session,cakephp,controller,Session,Cakephp,Controller,我对一个老师让我修改的web应用程序有问题,问题是我不知道cakePHP,我一直有问题。在阅读了很多之后,我想我已经掌握了框架的基本知识。我现在的问题是,我在视图中有一个链接,所以我调用控制器中的一个函数来从模型中检索数据,问题是每次我尝试访问该函数时,应用程序都会让我登录,而我的想法是它不应该。 我不知道cakePhp上的会话处理是如何工作的,所以我请求一些帮助。 控制器的代码如下所示: <?php class RwController extends AppController { v
<?php
class RwController extends AppController {
var $name = 'Rw';
// var $paginate = array(
// 'Tip' => array(
// 'limit' => 1,
// 'order' => array(
// 'tip.created' => 'desc'
// ),
// ),
// 'Evento' => array(
// 'limit' => 1,
// 'order' => array(
// 'evento.fecha' => 'desc'
// ),
// )
// );
function map() {
$this->helpers[]='GoogleMapV3';
}
function pageForPagination($model) {
$page = 1;
// $chars = preg_split('/model:/', $this->params['url']['url'], -1, PREG_SPLIT_OFFSET_CAPTURE);
// #print_r($chars);
// if(sizeof($chars) > 1 && sizeof($chars) < 3) {
// #echo "Belongs to ".$model.": \n";
// #echo var_dump($chars);
// }
// $params = Dispatcher::parseParams(Dispatcher::uri());
// echo "<p>".var_dump($params)."</p><br />";
#echo $this->params['named']['model'].$model;
#echo $this->params['named']['page'];
$sameModel = isset($this->params['named']['model']) && $this->params['named']['model'] == $model;
$pageInUrl = isset($this->params['named']['page']);
if ($sameModel && $pageInUrl) {
$page = $this->params['named']['page'];
} else {
#echo var_dump($this->passedArgs);
}
$this->passedArgs['page'] = $page;
return $page;
}
function index() {
$this->log('indexeando esta chingadera','debug');
$this->loadModel('User');
$this->loadModel('Evento');
$this->loadModel('Tip');
$dataEvento = $this->Evento->find('all');
$dataTip = $this->Tip->find('all');
$page = $this->pageForPagination('Evento');
$this->paginate['Evento'] = array(
'contain' => false,
'order' => array('Evento.fecha' => 'desc'),
'limit' => 1,
'page' => $page
);
$dataEvento = $this->paginate('Evento');
$page = $this->pageForPagination('Tip');
$this->paginate['Tip'] = array(
'contain' => false,
'order' => array('Tip.created' => 'desc'),
'limit' => 1,
'page' => $page
);
$dataTip = $this->paginate('Tip');
$this->set('users', $this->User->find('all'));
$this->set('eventos', $dataEvento);
$this->set('tips', $dataTip);
$this->set('rw');
if(isset($this->params['named']['model'])) {
if (strcmp($this->params['named']['model'], 'Evento') == 0) {
if($this->RequestHandler->isAjax()) {
$this->render('/elements/ajax_rw_evento_paginate');
return;
}
} elseif (strcmp($this->params['named']['model'], 'Tip') == 0) {
if($this->RequestHandler->isAjax()) {
$this->render('/elements/ajax_rw_tip_paginate');
return;
}
}
}
}
function about($id = null) {
$this->Rw->recursive = 0;
$this->set('rw', $this->paginate());
}
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow(array('index', 'about'));
}
function getCentros($id){
$this->loadModel('Centro');
$this->log('getcentros','debug');
if( sizeof($id) > 1){
$this->set('centros', $this->Centro->query("SELECT centros.id, name, latitud ,longitud
FROM `centros`,`centrosmateriales`
WHERE centros.id = centro_id
AND material_id ='".$id[0]."'
OR material_id='".$id[1]."'"));
}elseif( sizeof($id) >0) {
if($id == 0){
$this->set('centros', $this->Centro->find('all'));
}else{
$this->set('centros', $this->Centro->query("SELECT centros.id, name, latitud ,longitud
FROM `centros`,`centrosmateriales`
WHERE centros.id = centro_id
AND material_id ='".$id[0]."'"));
}
}
$this->redirect(array('action' => 'index'));
}
}
?>
不知道您正试图调用哪个函数,但如果cake试图让您登录,而您不想这样做,请将该函数添加到:
$this->Auth->allow(array('index', 'about'));
在你的beforefilter中,试试这个
$this->Auth->allow(array('*'));
它允许您访问控制器内的所有功能
<?php
class AppController extends Controller {
var $components = array('Session', 'Auth', 'RequestHandler');
var $helpers = array('Html', 'Form', 'Time', 'Session', 'Js', 'Paginator', 'GoogleMapV3');
function beforeFilter() {
$this->Auth->userModel = 'User';
$this->Auth->fields = array('username' => 'email', 'password' => 'password');
$this->Auth->loginAction = array('admin' => false, 'controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'index');
}
}
?>
但在此之前,请确保您对控制器的访问没有错误,因为您的控制器名称如下
class RwController extends AppController {
}
也许是你想要这样
class RwsController extends AppController {
}
哪个函数强制登录?这里没有什么能说明它为什么要注销。要检查或粘贴问题中的代码的几件事是:appController.php可以在beforeFilter()中设置强制登录每个页面刷新视图:或检查App/config/core.php的内容,这通常是存储会话参数的地方。RwController中有一个beforefilter函数,并且已经有这样一行了,这就是你的意思吗?我没有添加这一行,所以我不知道它是做什么的;该行允许您查看“索引”和“关于”页面,而无需登录。您还可以使用“*”(参见下面的答案)来允许在不登录的情况下访问所有功能。