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

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

ただいまの
回答率

89.52%

withInputにて渡した配列をビュー側の条件式に指定したい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,914

toll_tree

score 29

withInputで渡した値に関して、お聞きしたいことがあります。
仮にコントローラー内で、以下のようにトップページへリダイレクトさせたとします。

public function redirect_index(){
            $err_msg = ['err1' => 'エラー!','err2' => '入力しなおしてください'];
            return redirect('/')->withInput($err_msg);
        }


こちらでリダイレクトさせた場合、view側ではold()ヘルパ関数を使用し、withInputにて渡したデータを表示させることができますが、ビュー側で@issetなどで条件にかける場合はどのように指定すれば良いでしょうか?
具体的には以下のようにしたいしたいのですが、以下のコードではエラーが発生しうまくいきませんでした。

@isset(old($err_msg))
    <div>
      @foreach(old($err_msg) as $msg)
        <p>{{$msg}}</p>
      @endforeach
    </div>
  @endisset


※追記
エラー内容は下記の通りです。
「Cannot use isset() on the result of an expression (you can use "null !== expression" instead)」
$err_msgがundefinedではないかといったご指摘なのですが、自分としましては、redirect_indexメソッド内で「return redirect('/')->withInput($err_msg);」こちらで指定し、渡しているにも関わらずundefinedになる点が分からない部分でもあります。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • 退会済みユーザー

    2019/07/18 15:58

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

  • Eggpan

    2019/07/18 20:41

    「質問する」をクリックした際に出てくる文章は読まれましたでしょうか?
    文面を再掲します。
    ----
    7つの質問チェックリスト
    下記のチェックリストを参考にして、回答してくれる方がわかりやすい質問を心がけましょう。

    1. 質問内容がわかりやすいタイトル
    2. 質問の分野を表す、言語やツールのタグがついている("PHP"や"Java"等)
    3. 「実現したいこと」が明確である
    4. 「発生している問題」が明確である
    5. 「調べたこと・試したこと」が明確である
    6. 関連するソースコードが書かれている
    7. 利用している環境(FWやツール等)について書かれている
    ----

    少なくとも 3. 4. がある程度明確でないと、回答どころか解決ヒントになるのかも推測になってしまい、余計迷わせるかもしれないので、答えようが無いです。

    3. に関して、withInputとoldの使い方がよくわからないから知りたいのか、とりあえずエラーが消えれば何でもいいのか、あるいは他の事がしたいのか分かりません。

    4. に関しては、「toll_treeさんがエラーで困っている」事しか分からないです。トップページのコントローラ内容も、どんな画面になったかも書かれていませんので、色々と分かりません。


    お知らせ画面見る限りでは18時台に回答依頼もらっているようなのですが、現時点での私の推測はmikkameさんがコメントに書かれた通り「そもそもそんな変数は無くてundefinedエラーなのではないか」です。
    この通りであれば解決に繋がるコメントや回答は既に出ていますので、私からは回答を控えさせていただきます。


    toll_treeさんは色々あって不快に思われているのかもしれませんが、mts10806さんやmikkameさんの回答やコメントをもっとよく読んでほしいです。

    質問がよりわかりやすく修正され、違う方面での回答が出せそうでしたら回答させていただくかもしれません。ただし、回答のお約束はできないです。

    キャンセル

  • m.ts10806

    2019/07/18 22:20 編集

    return redirect('/')->withInput(['err1' => 'エラー!','err2' => '入力しなおしてください'])
    ↑これと同じというのが分かってないのでしたら「変数とは」からやり直すことと強く勧めます。

    とりあえずいつも通り根拠が何もないので、確固たる根拠をデバッグした上で記載してください。<渡している
    プログラムは書いた通りにしか動かないので「そう思ってる」はどこにいっても通じません。
    true or false のみです。現在falseなのは間違いないですよね。でしたら根拠のない自信は自分の身を滅ぼすだけです。

    キャンセル

回答 2

checkベストアンサー

+3

$err_msgがundefinedではないかといったご指摘

これはwithInputで私た配列が、セッションで保存され、次回、oldに、引き出したい添字(key)を渡すことで、valueを得る事ができる機能で、$err_msgという名前の変数を持ち越しさせる機能ではありません。

まず、PHPはHTTPアクセスされる度に、実行され、レスポンスが終了したら変数もろとも全てが消えて、初期化されるという概念を理解してください。
リダイレクトは、goto文ではないのです。新しくHTTPリクエストを発行させるのです。
これが理解できないのであれば、Laravelを扱うのは時期早々です。
なんども書いておりますが、まずはPHPだけで掲示板ぐらい作ってみてはいかがでしょうか?

Cannot use isset() on the result of an expression (you can use "null !== expression" instead)

こちらのエラーに関しては読んで字のごとくですが、issetの引数に、式を入れる事ができないです。
逆にいうと、issetの引数には変数名($hoge)しか入れられません。関数の結果がセットされているかどうかについては使えないためです。
どうすればいいのか、についてですが、一旦変数にいれてから、issetに入れる、または書いてある通り
あなたは "null !== expression"を使用する事ができます

その上で、このエラー解決後、$err_msgがundefinedと言われる事でしょう。
この予言が的中するのであれば、Laravelの学習は一旦やめ、PHPを勉強し直した方がいいでしょう

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/07/19 19:14

    @mikkameさん
    ご親切にご説明頂きありがとうございます。
    教えて頂きました通り、
    「@php
    $msg = old('err_msg_first');
    @endphp
    @isset($msg)
    <p>{{$msg}}</p>
    @endisset」
    このように、一旦変数にいれ、issetの引数に指定することで解決できました。

    キャンセル

  • 2019/07/20 05:41

    エラーは出なくなるが解決してないな たまたまうまく行ってるように見えてるだけだ

    キャンセル

  • 2019/09/23 00:22

    遅くなりましたが
    きつく言い過ぎたように思います。
    HRTが欠けていたと思います。
    申し訳ないです。
    また、質問していただければ答えます。

    キャンセル

+2

まずデバッグの方法を学びましょう

今回であれば「エラーにはなんて書いてあるか理解する」から始めてください。
エラーメッセージは取扱説明書のようなものです。
何が間違っているか、必ず書いてあります。
エラーメッセージに従い、修正を行えば必ず修正できます。

他の業種のように曖昧な修正指示がこないだけ簡単です。
例)
「何かの味が足りないようなきがするんだけど直してー」(料理人)
「なんかちょっと物足りないんだよねーリテイク」(イラスト、デザイン)

どこの何が間違っている、までパソコンが教えてくれているのに、それを無視してしまうのは怠惰だと思います

合わせて読みたい
https://qiita.com/cannorin/items/eb062aae88bfe2ad6fe5
https://teratail.com/questions/195256#reply-289628

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/07/18 14:56

    キャンセル

  • 2019/07/18 15:02

    デバッグも込みなのでこっちも
    https://teratail.com/questions/195256#reply-289628

    キャンセル

  • 2019/07/18 15:04

    mts10806さん ありがとうございます!追記しておきました

    キャンセル

  • 2019/07/18 15:09

    Qiitaのほうは自身の回答で貼りまくっていますが筆者本人でも回し者でもありません(念のため)

    キャンセル

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

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