##わからない事
タイトルにもあるようにCall to a member function setUser() on boolean
というエラーが発生しています。
新規登録機能を作成してまして、入力内容をDBに格納し、そのままログイン状態にする、という流れを作成しています。
開発環境は、
- PHP 7.1.21
- Cake 3.1.14
にです。
現状のコードが下記になります。
UsersController
1class UsersController extends AppController 2{ 3 public function initialize() 4 { 5 } 6 7 public function index() 8 { 9 $user = $this->Users->newEntity(); 10 $this->set(compact('user')); 11 12 if ($this->request->is('post')) { 13 // POSTされたらバリデーションを実施 14 // Entity作成 15 $validateUser = $this->Users->newEntity($this->request->data, [ 16 'validate' => 'register' 17 ]); 18 19 if ($validateUser->errors()) { 20 // バリデーションに引っかかった場合 21 $this->Flash->error('入力内容に不備があります'); 22 $this->set('user', $validateUser); 23 return $this->render($this->request->action, 'default'); 24 } 25 26 // 入力内容をセッションに格納 27 $this->request->session()->write('registerUser', $validateUser); 28 29 // 確認画面へ 30 return $this->redirect('/Users/confirm'); 31 } 32 33 if ($this->request->session()->check('registerUser')) { 34 // セッションに値が存在する場合は読み込む 35 $user = $this->request->session()->read('registerUser'); 36 } 37 38 // セッションに格納 39 $this->request->session()->write('registerUser', $user); 40 41 // GETされた時は入力画面へ 42 $this->render($this->request->action, 'default'); 43 return; 44 } 45 46 public function confirm() 47 { 48 // 入力内容をセッションから取得 49 $user = $this->request->session()->read('registerUser'); 50 51 if (!$user) { 52 // セッションから情報を取得できなかった場合 53 throw new BadRequestException('セッションの情報を取得できませんでした'); 54 return; 55 } 56 57 $this->set(compact('user')); 58 $this->render($this->request->action, 'default'); 59 } 60 61 public function save() 62 { 63 // 入力内容をセッションから取得 64 $user = $this->request->session()->consume('registerUser'); 65 66 if (!$user) { 67 // セッションから情報を取得できなかった場合 68 throw new BadRequestException('セッションの情報を取得できませんでした'); 69 return; 70 } 71 72 $user->password_hash = $user['password']; 73 74 if (!$this->Users->save($user)) { 75 // DBに格納できなかった場合 76 return $this->Flash->error('入力内容を保存できませんでした'); 77 } 78 79 // 登録内容でそのままログイン 80 $this->Auth->setUser($user->toArray()); 81 $this->redirect('/Users/complete'); 82 } 83 84 public function complete() 85 { 86 // ログインユーザー情報の取得 87 $authUser = $this->Auth->user(); 88 89 if (empty($authUser)) { 90 // ログインユーザーの取得ができなかった場合 91 throw new BadRequestException('登録情報の取得ができませんでした'); 92 return; 93 } 94 95 $this->render($this->request->action, 'default'); 96 } 97}
現在のエラーは、saveメソッド
にある$this->Auth->setUser($user->toArray());
で怒られています。
何で怒られているのか、はわかっているのですが、結局どう対応したらいいのか、という方法がわかりません。
対応策を教えて頂けると嬉しいです。
またコード上でこうした方が良い、という意見ありましたら同時に受け付けていますので、よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。