我已经使用 Yii 几个月了,它很棒,但是我在控制器中实现访问规则时遇到了麻烦,但奇怪的是,仅在生产中。
首先,在组件内部,我声明了一个类 UserApplications,我将在其中查看用户是否有权访问某个页面。
例如,此类中的一种方法是:
class UserApplications extends CApplicationComponent{
public function userEmail($id){
$included = ApplicationUser::model()->find('id_app=:id_app AND id_user=:id_user', array('id_app' => 5, 'id_util' => $id));
if (isset($included)){
return TRUE;
}else{
return FALSE;
}
}
}
这样,我查看用户是否可以访问电子邮件应用程序。如果记录存在,则返回 TRUE,否则返回 FALSE。
然后在我的 config->main.php 我有:
'components'=>array(
'user_apps'=>array('class'=>'UserApplications'),
最后,在我的电子邮件控制器中,我有类似的东西:
public function accessRules()
{
return array(
array('allow',
'actions'=>array('index', 'logout'),
'users'=>array('@'),
'expression'=>'Yii::app()->user_apps->userEmail('.Yii::app()->user->getId().')==TRUE',
),
array('deny',
'users'=>array('*'),
'deniedCallback' => function() {
$this->redirect(array('/site/index'));
},
),
);
}
这在开发中有效。我单击链接,如果不允许我进入应用程序,我会被重定向到网站的索引。
但是,在生产中,我得到的只是 HTTP 500 内部服务器错误。它无助于启用
defined('YII_DEBUG') or define('YII_DEBUG',true);
在 index.php 文件中,因为我仍然收到 500 错误,根本没有错误消息。
就像我说的,在开发中,一切都很好。
任何想法为什么会有这种行为?访问规则内部是否依赖于特定的 PHP 函数,这些函数仅适用于确定的 PHP 本身及更高版本?Yii 的要求只说 5.1 及以上,而我的部署服务器是 5.2.17(旧的,我知道,他们正在努力)
问候