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

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

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

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

Laravel 5

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

Q&A

解決済

3回答

314閲覧

アクションメソッドにリダイレクトさせた先で変数を取り出す方法について

toll_tree

総合スコア199

Laravel

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

Laravel 5

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

3グッド

0クリップ

投稿2019/07/16 06:05

以下のコード(testController.php)内のpracticeメソッド内から、testアクションにリダイレクトをさせるとします。
リダイレクト先へは、変数「test及び、test1」を持たせます。

public function practice(){ $test = 'hello'; $test1 = 'aloha'; return redirect()->action('testController@test',compact('test','test1')) } public function test(){ }

この場合リダイレクト先のtestメソッド内で、practiceメソッド内で持たせたtest及びtest1の変数を取り出すにはどのようにすれば良いでしょうか?
公式マニュアルを参照したのですが、取り出す方法についての記載はなかった為、質問させて貰いました。

aae_11, newyee👍を押しています

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

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

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

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

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

m.ts10806

2019/07/16 06:11 編集

前の質問が解決していないのになぜ進んだのでしょうか。 https://teratail.com/questions/200821 むしろ、前の質問で解決できるのではないでしょうか。 「リダイレクト」の概念が理解できない限り根本解決にはなりませんよ。回答読んでください。あなたがうだうだ言われるのは大事なことを全てスルーするからです。
m.ts10806

2019/07/16 06:16

それにドキュメントにはcompactを利用する方法は提示されていない。 このコードの出所がわかりません。本当に動くのこれ?
m.ts10806

2019/07/16 06:25 編集

「リクエスト」と「レスポンス」についての理解ができてないと一生理解はできません。PHP基礎(というかWebの概念)からやり直してください(何度目でしょうか)
mikkame

2019/07/16 14:07

PHPがデーモンとして動いているかのようなニュアンスを感じますね・・・
m.ts10806

2019/07/17 01:07 編集

回答読まずに脊髄反射で低評価。さすが熱心なアンチは違いますね。 人の話を聞かないにも程がある。私の回答を低評価するなら他の2つの回答も低評価しないとおかしいですよ?同じようなことを違う言い方で言っているだけです。 「一生初心者未満でやっていく」という所信表明が聞けて何よりです^^
hentaiman

2019/07/17 01:23 編集

もう回答書いちゃったけど、もしかして普通にテンプレートに変数をアサインしたつもりだけどうまく出来てないって意味なんだろうか?もしそうならリダイレクトがどういうものかを調べた方が良いです あとmtsさんの回答読んだところ、過去の質問からやりたい事を実現できるだけの知識は既に十分に得ているはずだと思えたので、丸投げ質問と判断しました。普段はマイナス押しませんが。
m.ts10806

2019/07/17 01:24

hentaimanさん だとしたら自身の過去質問で回答がついているもので解決可能なので、やはりこの質問の意図がさっぱりわからないということに。(いやこれまで連動しているはずなのに関連性がバッサリ切られて意図不明になっている質問だらけですけど)
BluOxy

2019/07/17 02:01 編集

リダイレクト先に値を渡す方法は(良し悪しは置いといて)クッキーやセッション、URLパラメータに値を渡すなど手段を色々提示されていると思いますが、それ等は試しましたか? 試したのなら、toll_treeさんがそれらの手段の内、どれがどう分からずこの質問が出たのかが、やはりよく分かりません。試していないのなら、まずは試してみてはいかがでしょう。 試してもよく分からないということであれば、回答するとしても「基礎から勉強した方が早い」としか言えません。
m.ts10806

2019/07/17 05:16

どの回答も大事なところを全てスルーした薄いコメント。お見事です。予想通り。 次の質問が手に取るように分かるので、その期待には応えてもらいたいくないですね。 その期待に応える=回答者をサポートセンター扱いにしている(非推奨行為)ですからね。
m.ts10806

2019/07/17 05:20

必要な指摘を全てスルーしている時点でガイドラインに抵触しているのは間違いないので通報しておきますね。
m.ts10806

2019/07/17 05:58

というか今回の私の回答をスルーできる神経が分かりません。 プログラミングをちゃんとやる気がないならプログラミング関連のQAサイトを利用しないでください。 都合が悪いコメントを全部スルーしているから「逃げてる」って言われるんですよ。 同じこと繰り返してばかりなんですよ。分からないんですか?
guest

回答3

0

リダイレクトにこだわっている限り答えは得られません。


プログラムは書いた通りにしか動きません。
でもそれは「自分が思うように書いたらその通りに動いてくれる」わけではなく
「プログラムの仕様通りに動く」だけです。

用意されていない機能を勝手に創造してくれることはないし、
書き手の意図を汲み取ってくれはしません。
bとdは別だし、0とOは別だし、aとAは別なのです。

そのためにPHPにはPHPマニュアルがあり、Laravelにはドキュメントがあるわけです。原文はいずれも英語ですが、英語が苦手な日本人のために有志が頑張って日本語に訳してくれているわけです。
日本語になったからって内容が省略されているわけではなく、きちんと仕様書として形を成しています。


toll_treeさんはよく「調べたけど、分からなかった」という文句を定型句のように使われていますが、それは「自分が思っている通りのことが実現可能か書いてなかった」というだけですよね。

でもそれを**「実装されていないから不可能」**と解釈はできないものでしょうか?

機能として実装されていないものはどんなに食い下がってもないし、できないものはできません。今回に限らず。ずっとです。

リダイレクトについて何度も質問されていますが、到底リダイレクトの概念を理解したうえでの質問とは思えません。

私以外も回答がついていますが、その回答を見ている感じだと
「代替案を欲しいのであれば提示は可能、リダイレクトにこだわるのであれば知らない(勝手にして)」
という意図が込められているように思います。

そういう機能を自力で実装するか、
そういう機能があるプログラミング言語を自力で実装するか、
代替案を探すか

そういうレベルです。

そもそも、論理的に考えられる人であれば**リダイレクトである必要があるのか?**というところから検討します。

前の回答で私が「これを読んで納得できないのでしたらコアソースからやり方を探るか、実装を根本から見直してください。」と書いたのはそういう意図からです。

既に書いた通り、PHPマニュアルもLaravelのドキュメントも仕様書です。
そこに書いてない = 機能として実装されていない ということになります。

「ドキュメントには書いてないけどきっと自分が思った通りにできるはずだ」を貫きたいのでしたら、質問するのではなく、どうぞ気が済むまでコアソースを追ってください。点で質問して点の回答を得るよりも得られる情報は多いでしょう。
Githubに公開されているオープンソースですし、Laravelは昨今は最も勢いのあるフレームワークなのでアップデートも頻繁です。(今見たら数時間前にアップデートされているファイルもありました)


「思った通りに機能を実現できる人」というのは
あくまでマニュアル、ドキュメントをしっかりと活用し、ロジカルに物事を考え、組み立てられる人のことであって、他者のアドバイスにまるで耳を貸さない・我を通す人のことではありません。

人の話をちゃんと聞かない人はたいていドキュメントもまともに読みませんしルールも守りません。

プログラミング言語は確かにやろうと思えば何でもできるものですが、
それはマニュアル、ドキュメントをしっかりと活用し、ロジカルに物事を考え、組み立てられる人が「できる」のであって、思い込みでなんでもやれると思っている人には「できない」のが答えです。

思い込みの強い人には何もできないし、プログラミング言語は何も応えてくれません。返ってくるのはnullかfalseでしょう。
それを同じスタンスを続ける限りtrueにはならないし、null以外の有益な情報は返ってきません。


ちなみにLaravel系の質問でよく回答されているmikkameさんはtoll_treeさんの過去の質問で同じことを回答しています。

リダイレクトさせた場合必ずGETリクエストになります。

今回は「リダイレクトは新たなGETリクエストになります」

人の話聞いてましたか?

1週間以上何してたんですか?

「GETリクエストになる」ということは「パラメータを渡す手段は限られる」ということになります。1つ前の質問の回答の通りです。

この3つの回答を総合すると:
「GETリクエストで可能な方法」OR「実装を根本から見直した代替手段」
しかないのです。

「リクエスト」と「レスポンス」を理解した上でないと話になりませんし、
適切な実装にもつながりません。

これは今回のmikkameさんの回答にもつながってきています。
LaravelでもなくPHPでもなくhttpの基本の話です。
今回のhentaimanさんの回答も本質は同じです(他にも基本・基礎を学ぶように指南してくれた人はたくさんいるはず)。


もしかしたらこの質問(2019/06/26投稿)とも関連性があるんじゃないかと勘繰ってしまうくらいなのですが(もしかしたらもっと前の質問も?)、それなら、もはや実装を見直すべき内容です。早く着実に進めます。
ロジカルに考えられていたら2週間も3週間も悩むような問題ではないです。

trial and error (試行錯誤)
には切り替えの良さも重要な要素です。

投稿2019/07/17 00:56

m.ts10806

総合スコア80854

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

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

m.ts10806

2019/07/17 01:06 編集

低評価された方コメントください。 質問者本人であれば読んで受け取った上で考えてください。
hentaiman

2019/07/17 01:28

過去の質問で実現可能な方法を丸っとコードで回答もらってたんですねえ…
m.ts10806

2019/07/17 01:33 編集

「なんか覚えがあるな」→ちょっと自分の過去回答調べる→「またこれか」の繰り返しです。(いや「まだこれやってるのか」かな)
m.ts10806

2019/07/17 01:35

既に解決可能な方法が書いてあるのにわざわざ同じ回答を投稿する回答者は中々いないでしょうね。回答依頼もらっても「既についた回答で解決可能ですよ」と断る人も少なくないでしょう。 同じタイミングで投稿されて被らない限り、エンジニアって無駄を嫌いますから。投稿前に一度画面更新して同じ内容が回答としてついてないか確認するって癖になってるくらいですし。
BluOxy

2019/07/17 01:51

質問に対する長期的な解決方法を含めた丁寧な回答に対して低評価は不当だと感じたので高評価しました。
m.ts10806

2019/07/17 01:52

BluOxyさん フォローありがとうございます。質問者本人含めて1人でも伝わればいいなと思います。
guest

0

ベストアンサー

質問文に書かれている参照したマニュアルに書いてあるけど・・・。
POSTで渡して受け取りたいって意味なら無理だけど代わりの方法はありますよ
フラッシュデータを保存するリダイレクトを見ると良いよ

何を調べて何が分かったのか知らないけど、laravelでリダイレクトでpostしたいと思ってもそれを実現する方法が見つからないとしたら、次はリダイレクトでpostする方法はあるのか?などなど色々と調べようがあるとは思うんだけどな
しかしこのような順序で思考できるのはやはり基礎知識がある人だけです。

追記

redirect()->action('testController@test',compact('test','test1'))

この書き方から察するに、Viewをリターンする時に変数アサインするのと同じ感覚でやったんですよね?
リダイレクトなので無理です。なぜ無理かはリダイレクトだからです。
第二引数にパラメーターを渡す書き方自体は可能ですが、Laravelの仕様を考えると動的な変数名を渡すような書き方をする事は無いです。

投稿2019/07/16 22:46

編集2019/07/17 03:51
hentaiman

総合スコア6426

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

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

toll_tree

2019/07/17 05:12

一度フラッシュデータで保存する方法を調べてみたいと思います。
hentaiman

2019/07/17 06:58

いや、mtsさんの回答に貼られているリンク「1つ前の質問」に書いてあるのでそっち見て下さい。フラッシュデータという点では同じです。その回答に書いてあるコードをよく読んで理解することです。
guest

0

リダイレクトは新たなGETリクエストになります。
通常のリクエストと差はありません。フォームで送信された場合と同様に扱ってください。
これはLaravel、PHP関係なく、HTTPの基本です。RailsでもDjangoでも同じ概念です。

真面目に一人前のプログラマを目指すなら、一旦Laravelから離れてもっと下のレイヤーについて学ばれた方が良いです。
ただたんにプログラミングでお金を稼ぎたいのであれば、未経験応募可に応募して現場で身につけた方が早いと思います

投稿2019/07/16 14:17

mikkame

総合スコア5036

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

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

toll_tree

2019/07/17 05:11

リダイレクトについて勉強になりました。ありがとうございました。
m.ts10806

2019/07/17 05:37 編集

1週間以上前と同じ回答を同じ人にされていることに関しては何もなしですか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問