🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

2回答

4776閲覧

Laravel5.7系でUndefined variable: requestのエラーを消したいです。

amaturePy

総合スコア131

Laravel

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2019/12/31 14:27

Laravel5.7系でviewファイルにあるフォームに入力した各項目をDBにstoreメソッドで追加する機能を作成しております。
(create.blade.phpのformに入力->ChatConversation.phpのcreate/storeメソッドで処理->DB登録)
その際に「Undefined variable: request」というエラーで躓いてます。
解決に関してアドバイスを頂きたいです。よろしくお願いします。

特に調べた際に以下の2点が自分の中で理解できておらず、もし可能であればお答え頂きたいです。
①コントローラーファイルとモデルファイルどちらにsaveメソッドの処理を書いた方が良いでしょうか?
(Laravelの構造上DBとのやりとりはモデルファイルを通じてだと思うのですが)
②$requestにformから渡される値をどのように格納すれば良いでしょうか?

web.php <?php Route::get('/', function () { return view('welcome'); }); Auth::routes(); Route::get('/home', 'HomeController@index')->name('home'); Route::get('/display', 'ChatConversationController@display')->name('chat_conversation'); Route::get('/create', 'ChatConversationController@create')->name('chat_conversation'); Route::get('/create', 'ChatConversationController@store')->name('chat_conversation' ); ?> コード
ChatConversationController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use \App\Model\ChatConversation; class ChatConversationController extends Controller { public function display() { $data = ChatConversation::all(); return view('display',['data' => $data]); } public function create(){ return view('create'); } public function store(){ $chatConversation = new ChatConversation(); $chatConversation->fill($request->all()); 。 $chatConversation->save(); } } ?> コード
create.blade.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> {{Form::open(['action' => 'ChatConversationController@store','method'=>'get'])}} {{ csrf_field() }} <label>node_id:<input type="text" name="node_id"></label><br> <label>line_id:<input type="text" name="line_id"></label><br> <label>message:<input type="text" name="message"></label><br> <label>version_type:<input type="text" name="version_type"></label><br> <label>ip_addr:<input type="text" name="ip_addr"></label><br> <label>platform:<input type="text" name="platform"></label><br> <label>translate:<input type="text" name="translate"></label><br> <input type="submit" name="post" value="Send"> {{Form::close()}} </body> </html> コード
ChatConversation.php モデルファイル <?php namespace App\Model; use Illuminate\Database\Eloquent\Model; class ChatConversation extends Model { protected $fillable = ['chat_conversations']; public function create(Request $request){ $chatConversation = new ChatConversation(); $chatConversation->fill($request->all()); $chatConversation->save(); } } ?> コード

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

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

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

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

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

guest

回答2

0

①コントローラーファイルとモデルファイルどちらにsaveメソッドの処理を書いた方が良いでしょうか?

(Laravelの構造上DBとのやりとりはモデルファイルを通じてだと思うのですが)

コントローラに書きます。

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6 7use \App\Model\ChatConversation; 8 9class ChatConversationController extends Controller { 10 public function display() 11 { 12 $data = ChatConversation::all(); 13 return view('display',['data' => $data]); 14 } 15 16 public function create(){ 17 return view('create'); 18 } 19 20 public function store(Request $request){ 21 $chatConversation = new ChatConversation(); 22 $chatConversation->fill($request->all());23 $chatConversation->save(); 24 } 25}

コントローラーを作成するとき、以下のコマンドを利用すると、雛形が作成され、Laravel 標準の使い方がわかります。

php

1php artisan make:controller ChatConversationController -r -m ChatConversation

投稿2019/12/31 14:33

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

amaturePy

2019/12/31 14:39

ありがとうございます。 ネットの記事の中にはモデルファイルにDBに登録するためのメソッドなどが記されてる物が合ったのですが、 今回の場合はモデルに書く必要はなかったでしょうか?
退会済みユーザー

退会済みユーザー

2019/12/31 14:41

Laravelのドキュメントを精読されてはいかがでしょう? 他のフレームワークの作法に惑わされても害悪でしかありませんから、あくまでLaravelの作法に従ってください。
amaturePy

2020/01/01 02:30

ありがとうございます。 公式ドキュメントを再度精読致します。
guest

0

ベストアンサー

PHPのシンタックスです。結局は定義されてないってだけですけど

php

1public function store(){

php

1public function store(Request $request){

ChatConversation::create()で出来ているのでしょうし、
それを真似すればいいだけのようにも思いますけど。

投稿2019/12/31 14:31

m.ts10806

総合スコア80875

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

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

amaturePy

2020/01/01 02:32

ありがとうございます。 見落としてました。 これに気づかないとは。。。。 詰まったら冷静にならないといけないですね。
m.ts10806

2020/01/01 06:56

エラーを読むことです。 Laravel特有の問題かPHP自体の問題か切り分けられない状態だとLaravel扱うのは厳しいと思います。 Laravelで質問している人の多くがPHP文法レベルの問題を吸収できていません。 質問する時間と労力が勿体ないです
amaturePy

2020/01/01 07:08

ありがとうございます。 今回は漸次的に仕事の都合でLaravelを使用したのですが、これを機会にPHPもしっかり学びます。 とりあえずは、ご協力のおかげでエラーも消え。DBへの登録まで完了しました。
m.ts10806

2020/01/01 07:38

んー。致し方ないとはいえPHPしっかり学んでないとLaravelは趣味ですら使いこなせないと思います。 仕事ならなおさら厳しいかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問