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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

10974閲覧

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

toll_tree

総合スコア199

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

3グッド

0クリップ

投稿2019/07/18 01:56

編集2019/07/18 11:58

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になる点が分からない部分でもあります。

aae_11, newyee👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/18 02:05 編集

これより前に128回も質問してきたtoll_treeさんとは別の方でしょうか。 一切過去質問の回答が生きている様子が見られませんが。 過去質問にもらったアドバイスで充分に解決可能なので質問するのではなく過去を振り返ってください。 何のために質問して何のために何日もかけて解決したのでしょうか(ほぼ問題は発生してないのに) あなたがする程度の質問、過去にご自身が受けたアドバイスで解決不可能なものはないんですよ。無駄な質問している暇があったら自分の資産をきちんと整理してください。
hentaiman

2019/07/18 02:10

きみの場合は自分の書き方が正しい前提で質問している節があるな 間違っている時は大抵まず自分を疑うべきだよ、正しい書き方をしているという思い込みを捨ててひとつひとつ構文を見直すといいよ
m.ts10806

2019/07/18 02:13

hentaimanさん 見覚えがあると思ったら自分が何回か(主に)この質問者に言ってました。<自分の書き方が正しい前提/思い込みを捨てて
退会済みユーザー

退会済みユーザー

2019/07/18 05:03 編集

「エラーが発生しうまくいきませんでした」 これまで何度も質問を繰り返しながら、プログラミングの技術が向上しないのは百歩譲ったとして、 いまだに具体的なエラーメッセージを明示して質問することすらできないのは、救いようがありません。
mikkame

2019/07/18 05:33

これ、そもそも$err_msgはリダイレクト先のページで参照できないから 常に$err_msgはundefinedなんだよね、isset関係ないじゃん
Eggpan

2019/07/18 11: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 21:14 編集

return redirect('/')->withInput(['err1' => 'エラー!','err2' => '入力しなおしてください']) ↑これと同じというのが分かってないのでしたら「変数とは」からやり直すことと強く勧めます。 とりあえずいつも通り根拠が何もないので、確固たる根拠をデバッグした上で記載してください。<渡している プログラムは書いた通りにしか動かないので「そう思ってる」はどこにいっても通じません。 true or false のみです。現在falseなのは間違いないですよね。でしたら根拠のない自信は自分の身を滅ぼすだけです。
guest

回答2

0

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

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

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

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

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

投稿2019/07/18 05:48

編集2019/07/18 06:04
mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mikkame

2019/07/18 06:04

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

2019/07/18 06:09

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

0

ベストアンサー

$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/18 13:18

編集2019/07/18 15:23
mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mikkame

2019/07/18 13:24

流石に書いてある通りのエラーすぎるので読むかググるか、翻訳してみてほしい。 流石に中国に在住でグレートファイアーウォール配下ってことはないでしょ? 中国だったらそもそもLaravelじゃなくてYiiを採用するところだとは思いますが・・・
m.ts10806

2019/07/18 14:48

細かくて申し訳ないですが、エラーの訳のところは、``で囲っておいたほうが見分けやすいかなと思いました。
mikkame

2019/07/18 14:50 編集

i did it
toll_tree

2019/07/19 10:14

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

2019/07/19 20:41

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

2019/09/22 15:22

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問