0

新しいユーザーが注文すると、UsersController::register() に送信する注文の登録フォームを処理するため、OrdersController と UsersController を通信する必要がある 2 つのコントローラーがあります。

私の登録アクションは、バスケットが処理された後に Auth を使用してユーザーをログインさせますが、Fatal error: Call to a member function login() on a non-object を返します:

//UsersController::register($data = null)
if(!empty($data))
  $this->request->data['User'] = $data;

if ($this->User->save($this->request->data)) {
  $registeredUser = $this->User->read(null, $this->User->id);
  if ($this->Auth->login($registeredUser['User']))
    if (empty($data))
       $this->redirect($this->Auth->redirect());
    else
       return $this->User->id;
}

私は通常の登録ページでこのアクションを使用し、UsersController 内の Google や Facebook などの他の API に対しても$this->register($data)で呼び出すと、正常に動作します。しかし、 OrdersController で次のように使用すると:

//UsersController::__construct()
public function __construct($request = null, $response = null, $session = null) {
    parent::__construct($request, $response);
    if (isset($session))
        $this->Session = $session;
}

setFlash() で同じ問題が発生したため、__construct をオーバーライドする必要がありました。

//OrdersController::add();
$newUser = new UsersController(null, null, $this->Session);
$newUserId = $newUser->register($data['User']);
4

0 に答える 0