从插件Cakephp访问受保护的方法

时间:2013-01-02 10:42:04

标签: php cakephp

  

可能重复:
  Fatal error: Call to undefined method CookieComponent::del()

我正在创建一个使用来自我的SiteUsers控制器的登录方法的插件,但是我收到错误消息:

  

调用未定义的方法SiteUsersController :: _ doLogIn()

插件网站用户控制器:

class SiteUsersController extends AppController {

public $name = 'SiteUsers';


/**
 * login_competition
 *
 */
public function login_challenge() {

    $this->autoRender = false;

    if (!$this->_doLogIn($this->request->data['SiteUser'])) {

            $this->Session->setFlash('ERROR');

        }

    }

    $this->redirect('/');
}

}

主应用中的网站用户控制器

class SiteUsersController extends AppController {

public $name = 'SiteUsers';

/**
 * _doLogIn()
 *
 * @param unknown_type $data
 * @return string|string
 */
protected function _doLogIn($data) {

    $this->_user = $this->SiteUser->getUserByEmailPassword(Sanitize::clean($data));

    if (!empty($this->_user)) {

        $this->Session->Write('SiteUser.id', $this->_user['SiteUser']['id']);
        $this->Session->Write('SiteUser.first_name', $this->_user['SiteUser']['first_name']);
        $this->Session->Write('SiteUser.username', $this->_user['SiteUser']['username']);

        return true;
    }

    return false;

}


}

1 个答案:

答案 0 :(得分:0)

我建议你将_doLogIn移动到组件中。这样您就不必将其公开,用户也无法通过浏览器直接访问它,并且所有控制器都可以使用它。

当前的_doLogIn可以被重写为使用新的组件方法,因此如果它被广泛使用,那么整个网站没有什么大不了的。

以防万一;)http://book.cakephp.org/2.0/en/controllers/components.html