質問するログイン新規登録
PHP

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

Q&A

1回答

251閲覧

laravel 機能追加エラーに関して

noele

総合スコア3

PHP

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

0グッド

0クリップ

投稿2023/07/30 03:42

0

0

実現したいこと

現在laravelを使用して料理レシピ投稿サイトを制作しています。詳細ページに料理レシピ投稿機能を追加し、レシピをデータベースに送って、同じページに反映させる作業を行っています。しかしながら投稿用の
コードを書いているのですが下記のエラーが出てしまい先に進めない状況です。自分なりにエラーの
内容をしらべ、POSTメソッドに訂正したり、controllerの記述を見直したのですが解決できませんでした
もしlaravelに詳しい方がいたら教えていただけたら幸いです。

ここに質問の内容を詳しく書いてください。
(例)
TypeScriptで●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

The GET method is not supported for route recipes/1/steps. Supported methods: POST.

該当のソースコード

(web.route) <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\CategoryController; use App\Http\Controllers\ProductController; use App\Http\Controllers\TopController; use Illuminate\Support\Facades\App; /* |-------------------------------------------------------------------------- | 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! | */ Auth::routes(); Route::resource('category', CategoryController::class); Route::resource('product', productController::class); Route::get('/', [ProductController::class, 'productTop']); Route::get('product/{id}',[ProductController::class, 'show']); Route::get('top',[TopController::class, 'index']); Route::get('top{id}',[TopController::class, 'show'])->name('top.show'); Route::post('/recipes/{recipe}/steps', [RecipeStepController::class, 'store'])->name('recipe.steps.store'); Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
(recipestepcontroller) <?php namespace App\Http\Controllers; use App\Models\Recipe; use App\Models\RecipeStep; use App\Models\Product; use Illuminate\Http\Request; class RecipeStepController extends Controller { // public function store(Request $request,Recipe $recipe) { $request->validate([ 'step' => 'required|string|max:1000', ]); RecipeStep::create([ 'recipe_id' => $recipe->id, 'step' => $request->input('step'), ]); $product_id = $recipe->product_id; return redirect()->route('top.show', $product_id)->with('success', '作り方を投稿しました'); } } ```ここに言語を入力 コー ``
(top.show.blade) <body> <div class="product-container"> <div class="product-details"> <img src="{{ asset('images') }}/{{ $product->image }}" alt="Product Image"> <h1>{{ $product->name }}</h1> <p>{{ $product->description }}</p> <p class="price">Price: {{ $product->price }} 円 + 税</p> <div class="recipe-form"> <form action="{{ route('recipe.steps.store', ['recipe' => $product->id]) }}" method="post"> @csrf <div class="form-group"> <label for="step">作り方</label> <textarea class="form-control" name="step" id="step" placeholder="作り方を入力してください"></textarea> </div> <button type="submit">作り方を投稿</button> </form> </div> <!-- レシピのステップを表示 --> <div class="recipe-steps"> <h2>作り方</h2> @if ($product->recipSteps) <ul> @foreach ($product->recipSteps as $step) <li>{{$step->step }}</li> @endforeach </ul> @else <p> recipe steps available</p> @endif </ul> </div> </div> </div> </body> </html> ``````ここに言語を入力 コード
コード (topcontroller) <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\ProductController; use App\Http\Controllers\CategoryController; use App\Models\Category; use App\Models\Product; class TopController extends Controller { // public function index(){ $categories = Category::latest()->get(); return view('top.index', ['categories' => $categories]); } public function show($id){ $product = Product::with('recipeSteps')->findOrFail($id); return view('top.show',compact('product')); } }

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

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

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

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

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

guest

回答1

0

エラーメッセージ通りだと思います。

The GET method is not supported for route recipes/1/steps. Supported methods: POST.
getはrecipes/1/stepsではサポートしてないので、post使って下さいということです。

おそらく、Form部分にmethod="POST"指定を忘れてる可能性が高いです。
Laravelは何も指定しない場合全部GETになるという、ある意味トンデモな仕様が仕込まれてますので。

それからhiddenでput、patchなどを使った場合もmethod="POST"は必須です。put、patchといった特殊コマンドはhtml5でのformタグの仕様にはないので、それでhiddenを使ってパラメータを送るのですが、hiddenはpostにしか対応していません。

投稿2023/08/04 09:27

編集2023/08/04 09:35
FKM

総合スコア3668

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

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

noele

2023/08/07 03:46

ご連絡ありがとうございます。もう一度みてみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問