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

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

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

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

PHP

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

1回答

4205閲覧

【Laravel】link_to_routeが使えない場合がある

Keight

総合スコア9

Laravel

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

PHP

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/01/30 17:51

編集2021/01/30 17:59

link_to_routeを記述すると、エラーが出るものと出ないものがあります。
index.blade.phpに書いてあるものはエラーが出ず、正常にページが表示され、link_to_routeの内容も反映されています。

index.blade.php

@extends('layouts.app') @section('content') <h1>メッセージ一覧</h1> @if (count($messages) > 0) <table class="table table-striped"> <thead> <tr> <th>id</th> <th>メッセージ</th> </tr> </thead> <tbody> @foreach ($messages as $message) <tr> <td><a href = "{{ route('messages.show', $message->id)}}">{{$message->id}}</a></td> <td>{{ $message->content }}</td> </tr> @endforeach </tbody> </table> @endif {!! link_to_route('messages.create', '新規メッセージの投稿', [], ['class' => 'btn btn-primary']) !!} @endsection

イメージ説明

ですが、下記の場合はエラーが出てしまい、ページ自体が表示されません。

show.blade.php

@extends('layouts.app') @section('content') <h1>id = {{ $message->id }} のメッセージ詳細ページ</h1> <table class="table table-bordered"> <tr> <th>id</th> <td>{{ $message->id }}</td> </tr> <tr> <th>メッセージ</th> <td>{{ $message->content }}</td> </tr> </table> {!! link_to_route('messages.edit', 'このメッセージを編集', ['id' => $message->id], ['class' => 'btn btn-light']) !!} @endsection

上記ソースコード下部の

{!! link_to_route('messages.edit', 'このメッセージを編集', ['id' => $message->id], ['class' => 'btn btn-light']) !!}

これを記述すると、下記のエラーが出てしまいます。
イメージ説明

なぜだか原因のわかる方いらっしゃいませんでしょうか?
ちなみに、コントローラやルーティングは下記の通りです。

MessagesController.php

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Message; class MessagesController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $messages = Message::all(); return view('messages.index', [ 'messages' => $messages, ]); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { $message = new Message; return view('messages.create', [ 'message' => $message, ]); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $message = new Message; $message->content = $request->content; $message->save(); return redirect('/'); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { $message = Message::find($id); return view('messages.show', [ 'message' => $message, ]); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { $message = Message::find($id); return view('messages.edit', [ 'message' => $message, ]); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // } }

web.php

<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', 'MessagesController@index'); Route::resource('messages', 'MessagesController');

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

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

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

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

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

guest

回答1

0

link_to_routeの第3引数に渡している配列内でidと書いているところをmessageに変更するとどうでしょうか。

{!! link_to_route('messages.edit', 'このメッセージを編集', ['message' => $message->id], ['class' => 'btn btn-light']) !!}

投稿2021/02/03 13:04

Lulucom

総合スコア1899

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

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

Keight

2021/02/05 17:10

遅くなりすみませんm(_ _)m ご回答いただいたとおりに書き直すと、無事うまくいきました! ありがとうございます。 これは、MessagesController.phpのeditアクション内で、 $message = Message::find($id); このように記述しているからということなのでしょうか? だから、 'id' => $message->id ではなく、 'message' => $message->id できちんと動くのでしょうか?
Lulucom

2021/02/06 09:06 編集

いいえ。 リンク先となるルート(つまりlink_to_route関数の第1引数に指定した名前 'messages.edit' のルート)のURIが 'messages/{message}/edit' となっています。この {message} の部分にidを渡したいので、キーを 'message' とする必要があります。 エラーメッセージ Missing required parameters for [Route: messages.edit] [URI: messages/{message}/edit]. は以下のような意味です。 [ルート: messages.edit] [URI: messages/{message}/edit] に必要なパラメータが欠けている。 パラメータというのは {message} の部分を指しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問