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

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

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

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

Q&A

2回答

2774閲覧

Laracel コントローラー内でメソッド間の変数の受け渡しがしたい

jugemuom

総合スコア0

Laravel 5

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

0グッド

0クリップ

投稿2022/04/24 04:48

解決したいこと

Laravelコントローラー内のメソッド間で変数の受け渡しを行いたい。

LaravelでWebアプリの実装を行っています。
フォームに入力された内容を受け取り、メソッド内で使った後、次に呼び出されるメソッドでも同じ値の入った変数が使いたいのですが、うまくいかないので、解決したいです。

現状のコード

<?php  ~割愛~ class PostController extends Controller { public $account; public function setAccountId($accountId){ return $this->$account = $accountId; }   ~割愛~ public function show(Request $request) { $this->account = $request->old('name'); // ビューファイルのinputタグで指定しています。ここでの受け取りは確認できています。 return \View::make('sendMail.Confirmation'); } public function SendMail(Request $request) { //表示したAccount IDの取得      $name = $this->account dd($name); // →ここで前ページで受け取った入力値を表示がさせられるようにしたい。 $email = 'xxx@example.co.jp'; $time = date('Y/m/d H:i', strtotime('now')); $url = "xxx"; $accountId = Account::where('name', $name)->first(['id'])->id; //このあたりの処理で$nameを扱いたい。 } }

#dd($namet)の実行結果

null

質問

PHP,Laravel初学者です。初歩的な質問になってしまうかもしれません。

showメソッドの時点で、$requestの中に入力値を受け取っており、その入力値を変数に入れておき、その後に呼び出されるSendMailメソッドで入力値の入った同じ変数を扱いたいです。

showメソッドで変数の受け取りまでは確認できております。
以前sessionを使って値を引き継ぐ実装を行っていたのですが、大人の事情でダメと言われてしまいました・・・

初めての質問投稿なのでわかりにくい箇所があるかもしれません。もし不明点ありましたら、ご指摘下さい。
どなたかご回答して頂けると幸いです。よろしくお願い致します。

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

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

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

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

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

phper.k

2022/04/24 05:06

routes/web.php の該当部分を提示してください
guest

回答2

0

sessionを使わせない意味不明な人を無視するしかない。指示を出してる側も出されてる側も初心者すぎる。

正確には違うけどリクエストごとに新しいコントローラーが作られてるような動作なので$accountはどこにも残らない。

php

1$c = new PostController(); 2echo $c->show(new Request());

php

1$c = new PostController(); 2echo $c->SendMail(new Request());

再利用するならどこかに残しておくしかない。
sessionかhiddenで再度送信するか。
表示に利用とhiddenで送信は同時に使っていい。これが一番普通な方法。

投稿2022/04/24 06:29

kawax

総合スコア10377

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

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

jugemuom

2022/04/24 10:58

ご回答ありがとうございます。 そうですよね。そちらの方向で検討させていただきます。
guest

0

リクエストが別ならセッションか、input type=hiddenなどでリクエストに含むやり方になると思います。

投稿2022/04/24 05:02

編集2022/04/24 09:48
m.ts10806

総合スコア80850

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

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

jugemuom

2022/04/24 05:42

ご回答ありがとうございます。 hiddennを使ったやり方も載せる情報がゆえにあえて使わない方向なんです。 セッションも試したのですが、書かせていただいた通りです・・・
bz0

2022/04/24 06:14

セッションが利用できないのであれば、テーブルにデータを保存する方法ではいかがでしょうか? - ユニークIDを付与し、hiddenでユニークIDを渡していく - ユニークID(+アカウントID?)をキーにしてテーブルに保存 - デメリット:途中で離脱した場合など中途半端なデータがテーブルに残る
jugemuom

2022/04/24 06:59

コメントありがとうございます。 テーブルも可能だとは思うのですが、仕様的にテーブルは使わずになんです・・・ せっかくコメントしていただいたのにすみません。
bz0

2022/04/24 07:40 編集

なるほど、難しいですね。 あとは、意図とは異なるかもですがブラウザ側(ローカルストレージ)でもたせる形でしょうか。 (セキュリティ的なリスクは有りますが) https://www.granfairs.com/blog/staff/local-storage-01 他思いつかず、お役に立てず申し訳ないです。 ご健闘お祈りしてます!!
m.ts10806

2022/04/24 07:51 編集

(低評価理由のコメントがないからどう修正すべきか全然分からない) DBがダメなら一時ファイル。 ただ、あれもだめこれもだめだと何もできないと思います。 リクエストが別なら結局どこか(外)で持っておくしかありません。 「大人の事情」を深く突っ込んでいくしかないですね。 今のところセッションが一番安全です。
m.ts10806

2022/04/24 07:51

いずれにしても現状から出せる案は全て出ています。 ファイル構成やリクエスト構成を提示されたほうが良いと思います。
jugemuom

2022/04/24 08:39

>bz0様 いえいえ、コメントしていただきうれしいです。 そうですよね、hiddenでやる方法とかも考えたのですが、セキュリティ的に・・・と言われてしまいました。 ありがとうございます!
jugemuom

2022/04/24 08:41

>m.ts10806様 低評価の件は私は押してないのですが・・・w ありがとうございます。セッションですよね。やっぱり。 参考にさせていただきます。
m.ts10806

2022/04/24 09:49 編集

いえ、誰が押したのかわからないのですけど、たまに嫌がらせ目的で無言で押していく人(サイト規約違反)がいるので。 ちゃんと理由があるならコメントほしいですし、押すときに「理由をコメントしよう」って出るはずなんですけどね。 一応編集して通知。(これで何も反応なかったら嫌がらせ目的なので通報対象ですね) あと先に書いたように、「ファイル構成やリクエスト構成」を提示することで 別案を提示できる可能性もなくはないです。 もし非効率なリクエスト構成になっているなら、まとめたり別角度からのアプローチで要件満たせるかもしれませんし。 そこを変更不可で絶対に現状維持がマストなのでしたら、外野が言えることはないです。 上司やリーダ、先輩と方針をご検討ください。
jugemuom

2022/04/24 10:57

>m.ts10806 なるほどです。 ご丁寧にありがとうございます。そちらの方向も検討してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問