CakePHP AppController.php问题

CakePHP AppController.php问题,php,cakephp,Php,Cakephp,我对cakephp脚本有问题。它是用cakephp版本2.5.1编写的 我遇到了致命错误:致命错误:无法在第46行的/lib/Cake/Controller/CakeErrorController.php中调用构造函数 原始AppController.php文件如下所示: <?php if (session_id() == '') { session_start(); } class AppController { public $components = array('Auth');

我对cakephp脚本有问题。它是用cakephp版本2.5.1编写的

我遇到了致命错误:致命错误:无法在第46行的/lib/Cake/Controller/CakeErrorController.php中调用构造函数

原始AppController.php文件如下所示:

<?php

if (session_id() == '') {
session_start();
}
class AppController
{
public $components = array('Auth');
public $helpers = array(
    0      => 'Form',
    'Html' => array('className' => 'MyHtml')
    );

public function beforeFilter()
{
    global $loguser;
    global $username;
    global $siteChanges;
    global $paypalAdaptive;
    global $user_level;
    global $setngs;
    global $price;
    global $colors;
    global $parent_categori;
    global $googlecode;
    parent::beforeFilter();
    $this->Auth->loginAction = array('controller' => '/', 'action' => '/login');
    $this->Auth->logoutRedirect = array('controller' => '/', 'action' => '/');
    $this->Auth->authenticate = array(
AuthComponent::ALL => array(
    'fields'    => array('username' => 'email', 'password' => 'password'),
    'userModel' => 'Users.User'
    ),
0                  => 'Form'
);

    if ($this->params['controller'] == 'api') {
        $this->Auth->allow();
    }

    if ($this->params['controller'] == 'fantasyhelps') {
        $this->Auth->allow();
    }

    if ($this->params['controller'] == 'paypals') {
        App::import('Vendor', 'PayPal');
    }

    $this->Auth->allow(, , 'login', 'signup', 'emailverification', 'verification', 'index', 'setpassword', 'userprofiles', 'viewshops', 'addto', 'press', 'about', 'toppeople', 'findpeople', 'storeprofiles', 'getstoreprofile', 'listings', 'show_color', 'show_price', 'showByCategory', 'getMorePosts', 'ipnprocess', 'getmorepricecolor', 'getItemByCategory', 'ajaxSearch', 'captcha', 'forgotpassword', 'showByRelation', 'getItemByRelation', 'faq', 'contact', 'item_comments', 'changePassword', 'copyrights', 'termsofsale', 'termsofservice', 'termsofmerchant', 'privacy', 'loginwith', 'loginwithtwitter', 'changecurrency', 'downimage', 'sitemaintenance', 'getviewmore', 'customviewmore', 'orderstatus', 'getsizeqty', 'searches', 'getmoregallery', 'viewitemdesc', 'followersList', 'getmoreprofile', 'getmorestorycomment', 'followingList', 'twittlogin_save', 'item_favorited', 'merupdate', 'custupdatend', 'testing', 'bookmarklet', 'getmorecomments', 'adaptiveipnprocess', 'additemusingurl', 'giftcardipnIpn', 'ggipn', 'ggcronjob', 'nearme', 'getMorenearme', 'gifts', 'story');
    $loguser = $this->Auth->user();
    $userid = $loguser[0]['User']['id'];
    $username = $loguser[0]['User']['username'];
    $first_name = $loguser[0]['User']['first_name'];
    $username_url = $loguser[0]['User']['username_url'];
    $user_level = $loguser[0]['User']['user_level'];
    $profile_image = $loguser[0]['User']['profile_image'];
    $this->set('loguser', $loguser);
    $this->set('username', $username);
    $this->set('username_url', $username_url);
    $this->set('user_level', $user_level);
    $this->set('first_name', $first_name);
    $this->set('profile_image', $profile_image);
    $this->set('currentaction', $this->params['action']);
    $this->loadModel('User');
    $user_datas = $this->User->findById($userid);

    if (!empty($loguser) && empty($user_datas)) {
        $this->Auth->logout();
    }

    $user_status_val = $this->User->find('first', array(
'conditions' => array('User.id' => $userid)
));
    $user_status = $user_status_val['User']['user_status'];

    if ($user_status == 'disable') {
        $this->Session->setFlash(__('Your account has been disabled please contact our support'), 'default', array(), 'bad');
        $this->redirect($this->Auth->logout());
        $this->redirect('/login');
    }

    $this->loadModel('Sitesetting');
    $this->loadModel('Cart');
    $this->loadModel('Orders');
    $this->loadModel('Item');
    $this->loadModel('Price');
    $this->loadModel('Color');
    $this->loadModel('Category');
    $this->loadModel('Forexrate');
    $this->loadModel('Managemodule');
    $this->loadModel('Googlecode');
    $this->loadModel('Contactseller');
    $this->loadModel('Story');
    $orderdetails = $this->Orders->find('all', array(
'conditions' => array('Orders.merchant_id' => $userid)
));
    $this->set('orderdetails', $orderdetails);
    $storyCount = $this->Story->find('count', array(
'conditions' => array('userid' => $userid)
));
    $this->set('storyCounts', $storyCount);
    $managemoduleModel = $this->Managemodule->find('first');
    $this->set('managemoduleModel', $managemoduleModel);
    $params = $this->params;
    $action = $params['action'];

    if ($this->params['controller'] != 'api') {
        $this->_setLanguage();
    }

    if (($action != 'sitemaintenance') && ($action != 'login') && ($this->params['controller'] != 'api')) {
        if (!$this->isauthenticated() || ($user_level != 'god')) {
            if ($managemoduleModel['Managemodule']['site_maintenance_mode'] == 'yes') {
                $this->redirect('/sitemaintenance');
            }
        }
    }

    $messageCount = $this->Contactseller->find('count', array(
'conditions' => array(
    'OR' => array(
        array('merchantid' => $userid, 'sellerread' => 1),
        array('buyerid' => $userid, 'buyerread' => 1)
        )
    )
));
    $_SESSION['userMessageCount'] = $messageCount;

    if (!isset($_SESSION['language_settings'])) {
        $languageJson = file_get_contents(SITE_URL . 'language_settings.json');
        $_SESSION['language_settings'] = json_decode($languageJson, true);
        $defaultLanguage = $_SESSION['language_settings']['settings']['default'];
        Configure::write('Config.language', $defaultLanguage);
    }

    if (!isset($_SESSION['currency_value'])) {
        $forexrateModel = $this->Forexrate->find('first', array(
'conditions' => array('status' => 'default')
));
        $_SESSION['currency_symbol'] = $forexrateModel['Forexrate']['currency_symbol'];
        $_SESSION['currency_value'] = $forexrateModel['Forexrate']['price'];
        $_SESSION['currency_code'] = $forexrateModel['Forexrate']['currency_code'];
        $_SESSION['default_currency_code'] = $forexrateModel['Forexrate']['currency_code'];
        $_SESSION['default_currency_symbol'] = $forexrateModel['Forexrate']['currency_symbol'];
    }

    $setngs = $this->Sitesetting->find('all');
    $price = ('all');
    $forexrateModel = $this->Forexrate->find('all', array(
'conditions' => array('status <>' => 'disable')
));
    $colors = $this->Color->find('all');
    $UserDetailss = $this->User->findById($userid);
    $this->set('UserDetailss', $UserDetailss);
    $this->loadModel('Shop');
    $sellerDetails = $this->Shop->find('all', array(
'conditions' => array('user_id' => $userid)
));
    $this->set('sellerDetails', $sellerDetails);
    $shopDetails = $this->Shop->find('first', array(
'conditions' => array('user_id' => $userid)
));
    $this->set('shop_name', $shopDetails['Shop']['shop_name']);
    $parent_categori = $this->Category->find('all', array(
'conditions' => array('category_parent' => 0)
));
    $googlecode = $this->Googlecode->find('all');

    if (!empty($userid)) {
        if (!empty($carts)) {
            foreach ($carts as $crt) {
                $itmids[] = $crt['Cart']['item_id'];
            }

            $itm_datas = $this->Item->find('all', array(
'conditions' => array('Item.id' => $itmids, 'Item.status' => 'publish')
));
            $total_itms = count($itm_datas);
            $this->set('total_itms', $total_itms);
        }
    }

    $this->set('price', $price);
    $this->set('colors', $colors);
    $this->set('forexrateModel', $forexrateModel);
    $this->set('parent_categori', $parent_categori);
    $this->set('googlecode', $googlecode);
    $this->set('media_url', $setngs[0]['Sitesetting']['media_url']);
    $this->set('setngs', $setngs);
    $siteChanges = $setngs[0]['Sitesetting']['site_changes'];
    $siteChanges = json_decode($siteChanges, true);
    $paypalAdaptive = $setngs[0]['Sitesetting']['paypaladaptive'];
    $paypalAdaptive = json_decode($paypalAdaptive, true);
    $this->set('siteChanges', $siteChanges);
    $_SESSION['site_url'] = SITE_URL;
    $_SESSION['media_url'] = SITE_URL;

    if (!empty($setngs[0]['Sitesetting']['media_url'])) {
        $_SESSION['media_host_name'] = $setngs[0]['Sitesetting']['media_server_hostname'];
        $_SESSION['media_url'] = $setngs[0]['Sitesetting']['media_url'];
        $_SESSION['media_server_username'] = $setngs[0]['Sitesetting']['media_server_username'];
        $_SESSION['media_server_password'] = $setngs[0]['Sitesetting']['media_server_password'];
    }

    $params = $this->params;
    $action = $params['action'];
    $this->set('action', $action);

    if ($this->params['controller'] != 'api') {
        $this->_setLanguage();
    }
}

public function isauthenticated()
{
    $user = $this->Auth->user();

    if (!empty($user)) {
        return true;
    }

    return false;
}

public function isauthorized()
{
    $user = $this->Auth->user();
    if (($user[0]['User']['user_level'] == 'god') || ($user[0]['User']['user_level'] == 'moderator')) {
        return true;
    }

    return false;
}

public function isauthorizedpersn()
{
    $user = ();
    if (($user[0]['User']['user_level'] == 'god') || ($user[0]['User']['user_level'] == 'shop')) {
        return true;
    }

    return false;
}

public function _setLanguage()
{
    if (isset($this->Cookie) && $this->Cookie->read('lang') && !$this->Session->check('Config.language')) {
        $this->Session->write('Config.language', $this->Cookie->read('lang'));
    }
    else if (isset($this->params['language']) && ($this->params['language'] != $this->Session->read('Config.language'))) {
        $this->Session->write('Config.language', $this->params['language']);
        $this->Cookie->write('lang', $this->params['language'], false, '20 days');
    }
}
}


$config['Settings'] = Configure::read('Settings');
define('SITE_URL', $config['Settings']['SITE_URL']);
define('SITE_NAME', $config['Settings']['SITE_TITLE']);
define('FB_ID', $config['Settings']['FB_ID']);
define('FB_SECRET', $config['Settings']['FB_SECRET']);
define('GOOGLE_ID', $config['Settings']['GOOGLE_ID']);
define('GOOGLE_SECRET', $config['Settings']['GOOGLE_SECRET']);
define('TWITTER_ID', $config['Settings']['TWITTER_ID']);
define('TWITTER_SECRET', $config['Settings']['TWITTER_SECRET']);
define('GMAIL_CLIENT_SECRET', $config['Settings'] 
['GMAIL_CLIENT_SECRET']);
define('GMAIL_CLIENT_ID', $config['Settings']['GMAIL_CLIENT_ID']);

?>

第一个错误指向这一行: $this->Auth->allow(,“登录”,“注册”,“电子邮件验证”, 因此,我删除了,因此它成为: $this->Auth->allow('login'、'signup'、'emailverification'

第二个错误指向这一行$user=(); 所以我把它改为$user=$this->Auth->user()

但是从$user=();更改为$user=$this->Auth->user();会引发一个致命错误: 致命错误:无法在第46行的/lib/Cake/Controller/CakeErrorController.php中调用构造函数

下面是CakeErrorController.php的内容。我听说CakeErrorController.php是一个核心文件,所以我真的不需要更改它吗

<?php
/**
 * Error Handling Controller
 *
 * Controller used by ErrorHandler to render error views.
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. 
(http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the 
LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright     Copyright (c) Cake Software Foundation, Inc. 
(http://cakefoundation.org)
* @link          http://cakephp.org CakePHP(tm) Project
* @package       Cake.Controller
* @since         CakePHP(tm) v 2.0
* @license       http://www.opensource.org/licenses/mit-license.php MIT 
License
*/

App::uses('AppController', 'Controller');

/**
* Error Handling Controller
*
* Controller used by ErrorHandler to render error views.
*
* @package       Cake.Controller
*/
class CakeErrorController extends AppController {

/**
* Uses Property
*
* @var array
*/
public $uses = array();

/**
* Constructor
*
* @param CakeRequest $request
* @param CakeResponse $response
*/
public function __construct($request = null, $response = null) {
    parent::__construct($request, $response);
    $this->constructClasses();
    if (count(Router::extensions()) &&
        !$this->Components->attached('RequestHandler')
    ) {
        $this->RequestHandler = $this->Components- 
 >load('RequestHandler');
    }
    if ($this->Components->enabled('Auth')) {
        $this->Components->disable('Auth');
    }
    if ($this->Components->enabled('Security')) {
        $this->Components->disable('Security');
    }
    $this->_set(array('cacheAction' => false, 'viewPath' => 'Errors'));
}

}

首先,我不想冒犯任何人,但是,这段代码看起来很糟糕,它有太多的错误,我甚至不知道从哪里开始…
全局
用法,直接访问超全局,通过本机调用手动启动会话,类定义之外的代码,不属于actu的公共控制器方法所有的动作,大量的不相关的代码,应该在具体的控制器和/或组件中,等等…你真的需要把它们清理干净

也就是说,您的
AppController
类没有扩展
Controller
(它必须这样做),并且本身没有构造函数,因此在
CakeErrorController::\uu construct()
中没有可通过
parent::\uu construct()
调用的构造函数,因此出现错误


另请参见

hi@ndm,感谢您的回复。我从第三方获得了代码,该第三方不愿意帮助解决问题。有人告诉我,代码编写得很糟糕。您能帮我纠正您注意到的两个问题吗:您的AppController类没有扩展Controller(它必须这样做)并且本身没有构造函数,因此在CakeErrorController::u-construct()中没有可通过父::u-construct()调用的构造函数。我对这一点非常陌生,甚至不知道在哪里进行您提到的更正。谢谢您的帮助。@johnodev您只需要扩展链接文档中所示的
Controller
。要获得正确的格式,您还需要导入它。您可以查看新的CakePHP设置的源代码,了解情况:谢谢t link。我已经添加了类AppController extends Controller,现在我可以看到网站显示的部分内容了!你能告诉我如何做你建议中的构造函数部分吗?请提供一个代码示例和放置位置。谢谢。@johnodev无需添加构造函数,这只是解释为什么ror occours,即因为在任何家长中都没有构造函数。我接受了你的答案。谢谢。我只需要找一位经验丰富的cakephp程序员来帮我整理其他各种错误并清理代码库。感谢你今天的帮助!