2

我正在使用 Cakephp 2.x 和 CakeDC 用户插件。我正在尝试通过将以下代码放在我的 AppController 中使变量 *'editprofile' 和 'profile_area_pic' 可用于所有控制器beforefilter()- 此代码允许我显示用户个人资料图片并且工作正常,直到您尝试注册用户并给出以下错误:

[PDOException] SQLSTATE[42000]: Syntax error or access violation: 1064您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“注册”附近使用正确的语法。

有没有人更好地了解如何使这些变量可用?提前致谢。

//////////// * 使以下变量可用/////////////////////////// ///////////

$this->loadModel('Profile');
$profileedit = $this->Auth->User('id');
$editprofile = $this->Profile->find('first',array(
                               'conditions'=>array('Profile.user_id'=>$profileedit), 
                               'fields'=>array('id')));
$this->set(compact('editprofile'));

$this->loadModel('Profile');
$profileuse = $this->Auth->User('id');
$profile_area_pic = $this->Profile->find('first',array(
                    'conditions'=>array('Profile.user_id'=>$profileuse), 
                    'fields'=>array('photo')));
$this->set(compact('profile_area_pic'));
4

2 回答 2

1

实现您正在尝试做的事情的更好方法是:

function beforeFilter() {
  if (!in_array($this->action, array('register','any_other_action',
'here')) {
    // Do your authentication or your profile query
  }
}

只需尝试根据您的需要进行更改,然后在过滤器之前检查它肯定会对您有所帮助。

于 2013-06-04T09:04:22.213 回答
1
function beforeFilter(){
   $this->set('editprofile', $this->_edit_profile());
}

function _edit_profile(){
   if($this->Auth->user('id')){
      $this->loadModel('Profile');
      $editprofile = $this->Profile->find('first',array(
         'conditions'=>array('Profile.user_id'=>$this->Auth->user('id')), 'fields'=>array('id'))
      );
      if (!$editprofile || empty($editprofile)) return false;
      return $editprofile;
   }
   return false;
}
于 2013-06-04T12:37:32.857 回答