当使用CakePHP的AuthComponent时,我得到了一个奇怪的错误。据我所知,代码本身没有任何问题。它在我的开发机器和生产服务器上运行得很好。但是,如果我将app/Core/config.php中的"调试"级别从2(开发)更改为0(生产),则应用程序在错误日志中失败,除了以下内容:
PHP致命错误:类'AuthComponent'找不到/path/to/my/app/View/Elements/auth_status。CTP在3号线
我检查了该文件是否存在于lib/Cake/Controller/Component/AuthComponent.php
中。我还实验性地将App::uses('AuthComponent', 'Controller/Component')
添加/删除到AppController和我的个人控制器中,但无济于事。这个问题难倒了我,我无法在我的开发机器上重现这个错误。这似乎表明服务器有问题,但我找不到解释,文档也不清楚运行AuthComponent所需的先决条件。有什么好主意吗?谢谢!
作为参考,这里是我的AppController:
class AppController extends Controller {
public $helpers = array('Recaptcha.Recaptcha');
public $components = array(
'Session',
'Auth' => array(
'loginAction' => array(
'controller' => 'users',
'action' => 'login'
),
'authenticate' => array(
'Form' => array(
'fields' => array('username' => 'email')
)
)
)
);
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow();
}
}
auth_status.ctp:
<div class="pull-right">
<?php if (AuthComponent::user('id')): ?>
<?php echo $this->Html->link("Welcome!", '/users/view/'.AuthComponent::user('id'));?>
|
<?php echo $this->Html->link('Logout', '/users/logout');?>
<?php else: ?>
<?php echo $this->Html->link('Login', '/users/login');?>
|
<?php echo $this->Html->link('Register', '/users/register');?>
<?php endif; ?>
</div>
我终于弄清了这件事的真相。在core.php中,有一个名为$prefix的变量供缓存引擎使用。如果该引擎是Memcache或APC,则必须更改它以避免与服务器上运行的任何其他Cake应用程序的命名冲突。我的开发笔记本电脑使用的是文件缓存引擎,而生产服务器使用的是APC(后来是Memcached)。同一个Cake应用的旧版本正在该服务器上运行,并且使用的是而不是 AuthComponent。一旦有人在该应用程序上发出请求,其他应用程序就会使用错误的缓存并抛出HTTP500错误,直到我清除缓存。
将$prefix变量更改为应用程序的唯一变量,问题就会消失。
您的php.ini
设置可能与include_path
不同。
检查开发服务器和生产服务器:
echo ini_get('include_path');
我认为这可能与这个问题有关。我代码中的错误与AuthComponent(或Cake)完全无关。
不幸的是,我不知道你的错误是什么——在我确定我的错误之前,我必须进行一些真正的调试。
如果有人好奇;我的错误是,我访问函数作为数组和我的生产服务器正在运行PHP版本<5.4 .
我也遇到了这个问题,因为它证明我的问题是,我试图加载一个插件在bootstrap.php,但没有安装它