質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.62%

PHPにてCreating default object from empty valueとなる

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,826

gobindar

score 47

 前提・実現したいこと

php Laravel5.5でWebサイトを作成しており、
userテーブルの項目の値に応じてログイン時のエラーメッセージを
変える機能を実装しております。
以下3ステップを実現したいです。

①request内のemailと合致するuserテーブルのレコードを探す
②レコードがなかった場合、レコードの項目statusを3とする
③レコードがあった場合、レコードの項目statusごとに表示を出力する
(0もしくは2であればauth.failed_provisional、
9であればauth.failed_quit、そのほかはauth.failed)

 該当のソースコード

    protected function sendFailedLoginResponse(Request $request)
    {
      $user = new \stdClass;
      $user = User::where('email', $request->email)->first();
      if (is_null($user)) {
          $user->status = 3;
      }

      if($user->status === 0 or 2){
        throw ValidationException::withMessages([
        $this->username() => [trans('auth.failed_provisional')],
        ]);
      }elseif($user->status === 9){
        throw ValidationException::withMessages([
        $this->username() => [trans('auth.failed_quit')],
        ]);
      }else{
        throw ValidationException::withMessages([
        $this->username() => [trans('auth.failed')],
        ]);
    }}

 発生している問題・エラーメッセージ

$user->status = 3;のところで、

Creating default object from empty value


となります。

 悩んでいること

まず、エラーの解消法を知りたいです。
その上で、
やりたいことは単純なのですが、
初心者のため、下記疑問があり、非常に効率が悪いです。
(googleで検索をかけても、結局限られた条件下での
対応がヒットするため、MECEな理解が難しいです。)
どなたか助けて頂けますと幸甚です。

・各変数の初期値をどう定義するのが正しいのかわからない
(今は$userが無定義だとエラーが発生するので、$user = new \stdClass;
調べた結果としていますが、本当に正しいかわかりません)
・空白の場合のチェックがis_null($user)でよいのかわからない
・変数が配列なのか要素なのかどうかでどう対応(初期値定義方法や空白
チェックの方法)が異なるのかわからない

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2018/11/23 16:50

    Laravelリファレンスは確認されてますよね・・・?

    キャンセル

  • gobindar

    2018/11/23 16:59 編集

    ご回答ありがとうございます。確認していますが、自前のログイン制御の項目や、リクエスト関連のページを見ても、全く見当がつきません。わからない単語は一つ一つ検索して確かめて意味を理解するようにしていますが、上記に記載させて頂きました疑問はLaravelというよりphpの体系的な理解が必要のようで、そこにたどり着くまでが非常に難しいです。

    キャンセル

回答 2

check解決した方法

0

https://teratail.com/questions/159740
上記の質問の解決方法にて解決しました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

ご自分で認証部分を頑張って作っておられるようですが、実はLaravelには標準で認証周り一通り作ってくれる便利な機能があります。もしご存知ではなく、なさろうとしている事の要件に見合うのであれば、以下のサイト等を参考に、コマンドを実行してみてはいかがでしょうか?

Laravel 5.5 認証
https://readouble.com/laravel/5.5/ja/authentication.html

Laravelの認証機能でログイン/ユーザ登録/パスワードリセットなどの管理画面を一撃構築する(基本&入門編)
https://www.ritolab.com/entry/51

Laravel 5.5 の認証機能とそのカスタマイズ
https://qiita.com/naga3/items/4f3defde59b31a1a797e

ただ、ある程度、認証周りをオリジナルで作り込んだ後に、認証を作るコマンドphp artisan make:authを入力しても、上手く作れない例もあるそうなので、ご注意ください。その場合はGit管理をされていれば、First Commitまで戻ってから認証追加のコマンドを入れ、あとでマージするのが良いかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/27 09:05

    ご回答有り難うございます。
    実は挙げて頂いたページを見て、機能を作成致しました。

    ですが、下記2つの理由で、作成した機能に対して
    カスタマイズを行っているところです。
    ・仮会員登録→本会員登録の機能がない
    ・仮会員や本会員登録などのステータスによって
     異なるエラーを出す機能がない

    せっかく参考文献を挙げて頂いたにも関わらず大変恐縮なのですが、
    ご質問を再度ご確認して頂けますと幸甚です。

    宜しくお願い致します。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る