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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

890閲覧

コメント機能をつけたいのですが、別ページに移動してから投稿できるようにしたい。

m.kk

総合スコア23

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/07/20 07:38

投稿に紐づくコメント機能を作っています。

例えば同一ページからは、コメントできるようになっているのですが
ファイルを新たに作成、そこで専用のコメント機能をつけようとすると
投稿idが呼び出されておらずerror(must be of the type int, null given, )になります。

下記にコードを貼り付けさせて頂きます。

SentencesController public function create(Sentence $sentence, Book $book) { $user = auth()->user(); $sentences = $sentence->getSentences($book->id); return view('sentences.create',[ 'user' => $user, 'book' => $book, 'sentences' => $sentences, ]); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request, Book $book, Sentence $sentence) { $user = auth()->user(); $data = $request->all(); $validator = Validator::make($data, [ 'book_id' => ['required', 'integer'], 'text' => ['required', 'string', 'max:2000'] ]); $validator->validate(); $sentence->sentenceStore($user->id, $data); return redirect()->back(); }
Model Sentence class Sentence extends Model { protected $filable = [ 'text', 'book_id' ]; public function user() { return $this->belongsTo(User::class); } public function getSentences(Int $book_id) { return $this->with('user')->where('book_id', $book_id)->get(); } //sentencesのstoreメソッドの作成、引数はidとテキストを配列で public function sentenceStore(Int $user_id, Array $data) { $this->user_id = $user_id; $this->book_id = $data['book_id']; $this->text = $data['text']; $this->save(); return; } }
view <h1>詳細画面</h1> <p><a href="{{ route('books.index')}}">一覧画面</a></p> <table border="1"> <tr> <th>id</th> <th>title</th> <th>over_view</th> <th>画像</th> </tr> <tr> <td>{{ $book->id }}</td> <td>{{ $book->title }}</td> <td>{{ $book->over_view }}</td> {{-- <img src="/storage{{$book->book_image}}"> --}} <img src="{{ URL::to('public/storage') }}/{{ $book->book_image }}" alt="{{ $book->book_image }}" /> </tr> </table> <th><a href="{{ route('sentences.create',$book->id)}}">コメント</a></th> <div class="col-xs-8 col-xs-offset-2"> @foreach($sentences as $sentence) <tr> <td>{{ $sentence->text }}</td> </tr> @endforeach

viewはかなり簡易的です。

原因はviewの

<th><a href="{{ route('sentences.create',$book->id)}}">コメント</a></th>

この部分だと思っております。
ここでidを紐付けできるコードがかければ、コントローラーにidが通ってmodelのgetSentencesメソッドがうまく行ってくれるのではないかと考えております。
どなたかよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下の形ではないでしょうか?

<a href="{{ route('sentences.create', ['id' => $book->id]) }}">コメント</a>

以下ページの「名前付きルートへのURLを生成する」辺りに記載あります。
Laravel 7.x ルーティング

投稿2020/07/20 07:54

meshi_s

総合スコア276

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

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

m.kk

2020/07/20 12:24

ありがとうございます! アドレスの表示が /sentences/create?id=70、と 変わったので方向性はあってそうです。 まだ投稿idまで引っ張ってこれてないので教えていただいたサイトを参考にいたします。
m.kk

2020/07/21 02:10

お世話になっております。 Route::get('sentences/create/{id}', 'sentencesController@create')->name('sentences.create'); 上を記載して、アドレスははっきりと投稿idを取れているのですが、view上ではidがまだ取れていません。 この場合の更なる原因追求でどう調べたらよろしいでしょうか、、、
m.kk

2020/07/21 02:20

纏めると、 投稿の詳細画面からコメントリンクをクリックするとアドレス上ではid取得、viewでは取得できていないです。 routeは正しいと仮定してcontrollerをいじっています。
meshi_s

2020/07/21 02:32

「public function create(Request $request, $id)」でid取得できませんか? ※id取得だけの話ですが。
m.kk

2020/07/21 02:59

ありがとうございます。 その引数でメソッド内の記述を変えて試行錯誤していますが、まだうまく行っておりません。。
m.kk

2020/07/21 04:41

しっかり投稿idは取れています。
meshi_s

2020/07/21 05:38

@createでidが取得できているのであれば、あとはcontrollerの書き方の問題かと思います。 一旦のエラーは解消されたかと思うので、別途質問をあげていかがでしょうか。 その際に、現状のcontrollerとmodelを記載するといいかと思います。
m.kk

2020/07/21 05:54

ありがとうございます!解決しました! $data = $request->id; $book->id = $data; こちらの記述でコメントを挿入できました! meshi_s様、ご回答誠にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問