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

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

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

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

Laravel 5

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

Q&A

解決済

4回答

8777閲覧

laravelでの画面遷移について

akoro

総合スコア27

Laravel

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

Laravel 5

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

0グッド

0クリップ

投稿2019/02/14 04:46

編集2019/02/15 01:35

プログラミング独学三か月、Laravel初心者です。
突如プロジェクトに参加し、Laravelを正式に使用しなければいけなくなりました。
勉強と解読同時に進めているのですがどうしても先に進めなくなってしまったので、お力添えいただけますと幸いです。

■実現したいこと
画面の遷移をしたい
(sectionController.phpのfunctionは既に記載済みだったのでview.bladeに正しいリンクがはれれば実現可能だと思われる)

■試したコード
当方記載コード(ミスはおそらくここ)

view.blade.php

1<a href="{{ route('admin.sections.create') }}" 2 class="btn btn-primary">セクション</a>

前任者の書いたコード

sectionController.php

1 /* 2 * @param \Illuminate\Http\Request $request 3 * @return \Illuminate\Http\Response 4 */ 5 public function create(Request $request) 6{ 7 $id = $request->query('id'); 8 $date = $request->query('date'); 9 //パラメータ 10 if(empty($id) || empty($date)) { 11 return redirect()->route('admin.home'); 12 } 13 return view('section.create')->with($_param + compact('section')); 14}

■結果
'admin.home'に遷移してしまった(return view('section.create')にしたい)

■原因予測
return redirect()->route('admin.home');とあるのでパラメータの$idと$dateの情報が送れていない

■質問
どのように記載すれば$idと$dateの情報が送れるのか

■参考
HTTPリクエスト
5.5でひとつ古いバージョンですが、見やすかったのでこちら参照しました。
functionのかきかたはありましたが、view側の記載がなく、実装できませんでした。

■環境
Laravel5.6 windows10

■質問追記
そもそもpublic function create(Request $request)の引数として$idと$dateを渡すということが見当違いなのでしょうか?

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

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

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

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

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

guest

回答4

0

php

1$request->query

これはクエリ文字列からデータを取得するコードです。クエリ文字列は何なのかというと、

text

1https://teratail.com?id=1

こういうurlの末尾のパラメーターの事ですね。
つまり前任者のプログラムとしては、idとdataパラメーターを渡して欲しいわけです。

Undefined variable: id

このエラーはidパラメーターを渡していないから表示されているわけですね。

名前付きルートでの値の渡し方は、

{{ route('admin.sections.create',['id' => 1, 'data'=>'text']) }}

こんな感じです。

追記

前任者が書いたプログラムにをみてください。

php

1$id = $request->query('id'); 2$date = $request->query('date');

これは何をしているのかというと、「idというクエリ文字列」と「dateというクエリ文字列」を取得しようとしています。もし取得しようとしているクエリ文字列がなかったら、当然エラーが出ますよね。ないものは取得しようがありません。なのでidとdateが必要というわけです。

そして

(request $request)に対してパラメーターを渡す。

という認識は少し違います。これは「Illuminate\Http\Request」クラスを依存注入しているのです。

php

1$request->query

というのは、簡単にいえばRequestクラスのqueryメソッドを使っているということになります。queryメソッドは送られてきたクエリ文字列を取得する処理が書かれているというわけです。

依存注入についてはこちらに詳しく書かれていますが、もしかしたらphpに置けるオブジェクト指向をもう少し学ばれた方が良いかもしれません。

投稿2019/02/14 05:48

編集2019/02/15 01:29
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

akoro

2019/02/14 05:54

'id' => 1の1の部分は卒度変わるので$id設定したのですが、なぜそれでもundefinedなのでしょうか?
退会済みユーザー

退会済みユーザー

2019/02/14 06:14 編集

view.bladeにはそもそも$idは渡していますか? $id = 1; return view('view')->with(compact('id')); 例えばこんな感じで書かないと、view側で$idは使えません。
akoro

2019/02/14 07:08

受け渡しされていなかったです。 ちなみに同じくもうひとつのの書いていた第いただいたものだとdata、当方だとdateに当たる変数の$dateもないのですが、なぜ$idだけエラーがでているのですが。。。
退会済みユーザー

退会済みユーザー

2019/02/14 07:41

画面が推移した先の最初の処理、 $id = $request->query('id'); で引っかかっているからですね。ここでidを取得しようとして、idパラメーターがないとエラーになるわけです。試しに$idだけ渡して$dateを抜いてみてください。今度は$dateでエラーが出るはずです。
akoro

2019/02/15 01:08

たしかし$dateでえらーでました。 そもそも引数として(request $request)に対してどのパラメーターを受け渡すのか、の判断ができないでうすが、idとdateを渡すという認識自体は合っているのでしょうか?
akoro

2019/02/15 01:50

難しくて現状解読は困難ですが情報ありがとうございます。
guest

0

見やすかったのでこちら参照しました。

マイナーバージョンでも1つ違うと適用できなくなるので
「みやすいから」と自己都合で勝手に別のバージョンの情報を参照するのは事故の元です。
きちんと自身が利用しているバージョンのドキュメントを確認してください。

投稿2019/02/14 05:11

m.ts10806

総合スコア80850

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

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

akoro

2019/02/14 07:10

いろいろ検索書けましたらバージョンが変わる=機能追加ではないのですね。 完全に対応しない仕様もあるということを初めて知りました。 ご指摘ありがとうございます。
m.ts10806

2019/02/14 07:14

互換性が100%保証されるものではないですし、 バージョンが違う資料を見ていたらそれは何か問題かあっても文句は言えないです。 ドキュメントがバージョンで別にできるということはそれなりの理由があります。
guest

0

自己解決

{{ route('admin.section.create', ['id' => $project->getId(), 'date' => $date->date->format('Ymd')]) }

回答でも頂いていたようにURLの設定をみて、パラメータを判断。
コントローラやヴューコンポーザなどに散りばめられていた情報を拾って上記の式になった。

サービスコンテナ公式ドキュメント参照
依存注入が正直まだ理解しきれていないところがあるため、現状これ以上詳しく加筆できません。
随時更新します。

投稿2019/02/15 08:58

編集2019/03/15 01:52
akoro

総合スコア27

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

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

m.ts10806

2019/02/15 11:20

閉じずにきちんと整理してから投稿すべきかと。誰も急いでませんよ
guest

0

route('admin.sections.create', [ 'id' => $id, 'date' => $date, ])

見るならこっち
https://readouble.com/laravel/5.5/ja/urls.html

投稿2019/02/14 04:56

kawax

総合スコア10377

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

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

akoro

2019/02/14 05:09

参考ページありがとうございます。 Undefined variable: idのエラーが発生してしまったのですが、何が原因でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問