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

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

ただいまの
回答率

88.61%

変数(オブジェクト)をコントローラへ渡す方法

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,158

toll_tree

score 35

post、またはgetにより、変数データ(オブジェクト)をコントローラー部分へ送る方法はありますでしょうか?
具体的には下記コードTestController.phpの「test」メソッド内にて、index.blade.phpへ送った$dateを、index.blade.phpのフォーム内にて組み込み、TestControllerの「index」メソッド内にて、ルーティングを通し渡したいです。
以下は、TestController.phpです。
※ミニマムコードとして、作成しましたので多少省かせてもらっています。

<?php
class Testcontroller extends Controller{
  public function test(){
    $date = new Carbon();
    return view('index',['date' => $date]);
  }
  public function index(Request $request){
    $data = $request->data;
  }
}


以下は、index.blade.phpです

<html>
  <body>
    <form method="post" action="/index" >
      <input type="submit" value='送信'>
   <input type="hidden" name="data"value="{{$date}}">

    </form>
  </body>
</html>


以下は、ルーティング部分のweb.phpです

<?php
Route::post('/index','TestController@index');
Route::get('/test','TestController@test')
?>


ご回答頂けましたら、幸いです。
よろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • date

    2019/06/27 15:09

    inputが閉じられていませんよ。実際は閉じられていると思いたい

    キャンセル

  • m.ts10806

    2019/06/27 15:42

    dateさん
    inputタグのことでしたら閉じは必要ないです。

    キャンセル

  • m.ts10806

    2019/06/27 15:50

    dateさん
    そういうこと・・修正履歴見て理解しました。失礼しました。

    キャンセル

回答 3

+2

今一つ追記修正依頼に応えてもらってないのでふわっとした回答になりますけど。
(何を聞かれているか分からないなら確認してほしい。思い込みばかりでは全員疲弊します) 

post、またはgetにより、変数データ(オブジェクト)をコントローラー部分へ送る方法はありますでしょうか?

ありません。正確には普通はそんなことはやりません
LaravelよりもPHPよりも、そもそもHTMLの問題。
HTMLに投入できるのはそもそも文字列として扱える情報だけです。
配列やオブジェクトを投入することはできません。
(無理やり文字列にしようとしてもArrayとかObjectとかになるだけですしjson_encode()して持っておくのもあまり賢明ではありません)

そもそも$date = new Carbon();$date = new DateTime();とイコールです。
つまり実行時点の日時でDateTimeオブジェクトを生成するわけですが、
それをそのまま渡して何の意味があるのでしょうか?
受取先でnew Carbon();すれば良いのでは?

「回りくどいことをしようとしている」と書いたのはそのためです。

「用途」まで書かないと分かりません。
渡して何に使いたいのか。

もし「test()を表示した時点の時間を持っておいて渡したい」というのでしたら、HTMLに投入する時点ではCarbonを利用するまでもないです。
blade側でPHPの関数date()で文字列として現在の日時を埋め込んでおき

<input type="hidden" name="data" value="{{date("YmdHis")}}">

受取先でCarbonから取得すれば良いです。

public function index(Request $request){
    $data = new Carbon($request->data);
}

「どうしてもオブジェクトで」というのでしたらセッションでしょう。
ただしこのセッションを持っておく意味はあまりないですね。

結局のところ「渡して何にどう使いたいのか」用途次第です。


蛇足:今後質問する際に気を付けてもらいたいところ

※ミニマムコードとして、作成しましたので多少省かせてもらっています。

ミニマムコード作成は大変こちらとしても助かりますし分かりやすくなるところなのですが、要件が抜けてしまっては意味がありません。
「実現したいこと」「前提、背景」「結局どうしたいのか」が見えないとどんなミニマムコードも「何もしてない」のと同じです。伝わるものがありません。

回答者が欲しがっているのは「結局何がしたいのか」です。
「要件」です。

コードはあくまで実現の手段としての道具にすぎないので、
「ミニマムコード書いたからこれで分かるやろ」というのは質問者の怠慢です。
道具をどのように使いたいのか、何の目的なのか、これは提示している側にしか分からない、
質問者の頭にしかない「仕様」です。
質問するということはコードで表現がきちんとできない場合がほとんどですから「コードで全部理解しろ」と求めるのは無理があります。
ここはきちんと具体的に文章で説明してください。「伝える力」大きくは「コミュニケーション能力」の問題です。技術は関係ありません。

コード内にコメントで書いてもいいです。
「自分が何をしたいのか」
これが欠けては質問と回答は成り立ちません。問題解決にもなりません。

よろしくお願いします

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

Laravelの基本を一度以下の学習資料などで、一通り学んでみると理解が深まるかと思います。
PHPフレームワーク Laravel入門
paiza Webアプリ開発入門 Laravel編 (全5レッスン)
ドットインストール Laravel 5.5入門

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/06/27 15:53 編集

    toll_treeさん
    この段階で基本をやりなおせと言われていることに危機感を持ってほしい。(何人にそのように指摘されていますか?そして無視して強引に進めていますか?)
    LaravelではなくPHP、ひいてはプログラミングとは、から。

    キャンセル

  • 2019/06/27 19:13 編集

    > 「どうしてもオブジェクトで」というのでしたらセッションでしょう。

    シリアライズできるオブジェクトとそうじゃないやつがいるのでこの限りではないと思います(再帰参照しているやつとかできないし)

    # 追記 コメントした箇所まちがってたっぽい。 aro10さん、mts10806さんごめんなさい!

    キャンセル

  • 2019/06/27 19:43

    mikkameさん
    たぶんそれ、私の回答につけられたほうが良いのでは・・・
    いずれにしてもそういう場合は別のやり方は幾らでもありそうに思います。
    結局「そのデータを使って何がしたいか」次第ですね。

    キャンセル

-2

いつも質問に何気なく置いてあった

use Illuminate\Http\Request;


これを使います。
Laravel Request
などで調べてみて下さい
https://readouble.com/laravel/5.5/ja/requests.html

<form>にデータを渡して処理するのはPHPと同じで<input>にnameを入れてください

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/06/27 18:25

    検索処理だったらindexでもformで処理すると思うんですが
    もしかしてタブーだったりします?

    キャンセル

  • 2019/06/27 18:52

    すいませんmikkameさんのおっしゃる通りです。

    キャンセル

  • 2019/06/27 18:57

    初期でリスト表示があるかないかでも違いそうですね。
    あればget,postを同じindexメソッドに投げるでしょうし、なければ別メソッドで受けても良いかもしれません。

    キャンセル

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

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

関連した質問

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