質問: $request->query('date'); //パラメータ if(empty($id) || empty($date)) { return redirect()->route('admin.home'); } return view('section.create')->with($_param + compact('section')); } ``` ■結果 '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を渡すということが見当違いなのでしょうか?
回答: ``` $request->query ``` これはクエリ文字列からデータを取得するコードです。クエリ文字列は何なのかというと、 ``` https://teratail.com?id=1 ``` こういうurlの末尾のパラメーターの事ですね。 つまり前任者のプログラムとしては、idとdataパラメーターを渡して欲しいわけです。 > > Undefined variable: id > > > このエラーはidパラメーターを渡していないから表示されているわけですね。 名前付きルートでの値の渡し方は、 ``` {{ route('admin.sections.create',['id' => 1, 'data'=>'text']) }} ``` こんな感じです。 追記 前任者が書いたプログラムにをみてください。 ``` $id = $request->query('id'); $date = $request->query('date'); ``` これは何をしているのかというと、「idというクエリ文字列」と「dateというクエリ文字列」を取得しようとしています。もし取得しようとしているクエリ文字列がなかったら、当然エラーが出ますよね。ないものは取得しようがありません。なのでidとdateが必要というわけです。 そして > > (request $request)に対してパラメーターを渡す。 > > > という認識は少し違います。これは「Illuminate\Http\Request」クラスを依存注入しているのです。 ``` $request->query ``` というのは、簡単にいえばRequestクラスのqueryメソッドを使っているということになります。queryメソッドは送られてきたクエリ文字列を取得する処理が書かれているというわけです。 依存注入についてはこちらに詳しく書かれていますが、もしかしたらphpに置けるオブジェクト指向をもう少し学ばれた方が良いかもしれません。