2013-06-04 1 views
2

Я использую Cakephp 2.x и плагин CakeDC Users. Я пытаюсь сделать переменные * 'editprofile' и 'profile_area_pic' доступными для всех контроллеров, поместив нижеприведенный код в мой AppController's beforefilter(). Этот код позволяет мне отображать фотографии профиля пользователя и прекрасно работать, пока вы не попытаетесь зарегистрировать пользователя и не предоставите следующие ошибка:Сделать переменные доступными для всех контроллеров в CakePHP 2.x

[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')); 
+0

Пожалуйста, не помечайте его 1.3 и 2.x - выберите только основную версию! Кроме того, почему loadModel() дважды? После его загрузки нет необходимости делать это снова в одном и том же месте. – mark

+0

Спасибо, отметили, и, пожалуйста, проигнорируйте второй loadModel() – Joshua

ответ

1

лучший способ осуществить то, что вы пытаетесь сделать это:

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

просто пытаются изменить в соответствии с вам нужно пройти регистрацию перед фильтром, это обязательно поможет вам.

+0

, используя эту реализацию, отображает профиль pic, но все же бросает ту же ошибку при регистрации пользователя, каких-либо других предложений? – Joshua

+0

, ошибка которого наступает? есть ли ошибка auth? – liyakat

+0

Пожалуйста, посмотрите http://stackoverflow.com/questions/16999502/saving-data-to-user-model-from-profile-model-cakephp заранее liyakat – Joshua

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; 
} 
+0

Имеет ли переменная $ profileedit какие-либо данные? – Joshua

+0

будет хранить ответ '$ this-> Profile-> find ('first', array ( 'conditions' => array ('Profile.user_id' => $ profileedit), 'fields' => array (' id ')) ); 'если он доступен –

+0

Я просто перечитал ваш комментарий и скорректировал ответ на' $ this-> Auth-> user (' id ') 'вместо –