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

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

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

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

Q&A

解決済

2回答

336閲覧

laravel フォーム送信について

koako

総合スコア6

Laravel

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

0グッド

0クリップ

投稿2020/09/27 05:00

### フォームでのPost送信ができない。

現在商品の情報を新たにDBに追加する処理をフォームを作成し送信後FormRequestを使用しバリデーション チェックを行い登録しようとしてますがフォームでPOST送信ができない状況です。

Route::group(['prefix' => 'admin', 'middleware' => 'auth:admin'], function() { Route::get('item', 'Admin\ItemController@index')->name('admin.item.index'); Route::get('/item/add', 'Admin\ItemController@add')->name('admin.item.add'); Route::post('/item/add','Admin\ItemController@create')->name('admin.item.create'); });

下記の処理を行ったのちに上記のようにpostでadmin/item/addにアクセスするとAdmin\ItemController@createの処理が実行されると思ったのですが送信できませんでした。
フォームのactionの中を{{rote('admin.item.create')}}でルーティングのnameを使用するやり方も行ったのですが変わりませんでした。

どなたかご教授頂けると幸いです。

  1. フォームの作成 resources/views/admin/item/add.blade.php
<h1>商品登録</h1> @if (count($errors) > 0) <p>入力に問題があります。再度入力してくだい。</p> <form action='admin/item/add' method='POST'> @endif {{ csrf_field() }} <dl> <dt>商品名</dt> <dd><input type='text' name='product_name'></dd> @if ($errors->has('product_name')) <ul> @foreach ($errors->get('product_name') as $error) <li>{{$error}}</li> @endforeach </ul> @endif <dt>値段</dt> <dd><input type='text' name='price'></dd> @if ($errors->has('price')) <ul> @foreach ($errors->get('price') as $error) <li>{{$error}}</li> @endforeach </ul> @endif <dt>在庫数</dt> <dd><input type='text' name='stock'></dd> @if ($errors->has('stock')) <ul> @foreach ($errors->get('stock') as $error) <li>{{$error}}</li> @endforeach </ul> @endif <dt>商品説明</dt> <dd><textarea name='explanation'></textarea></dd> @if ($errors->has('explanation')) <ul> @foreach ($errors->get('explanation') as $error) <li>{{$error}}</li> @endforeach </ul> @endif </dl> <input type='submit' value='登録'> </form>

2.バリデーションを行うFormRequestの作成 app/Http/Requests/ItemRequest.php

namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use App\Item; class ItemRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'product_name' => [ 'required', 'max:50', 'Rule:unique('items')->ignore($this->id)' ], 'explanation' => 'required|max:255', 'price' => 'required|integer|min:0', 'stock' => 'required|integer|min:0', ]; } public function messages() { return [ 'product_name.required' => '商品名が未記入です。', 'product_name.unique' => '既にこの商品は登録してあります。', 'product_name.max' => '50文字以内で入力してください。', 'explanation.required' => '商品説明が未入力です', 'explanation.max' => '255文字以内で入力してください', 'price.reqiured' => '値段が未入力です。', 'price.integer' => '0以上の整数を入力してくだい。', 'price.min' => '0以上の整数を入力してくだい。', 'stock.reqiured' => '在庫数が未入力です。', 'stock.integer' => '0以上の整数を入力してくだい。', 'stock.min' => '0以上の整数を入力してくだい。', ]; }

3.コントローラにフォーム画面を表示するためのadd,データ保存するためのcreareを追加

namespace App\Http\Controllers\Admin; use Illuminate\Http\Request\ItemRequest; use App\Item; use App\Http\Controllers\Controller; class ItemController extends Controller { public function __construct() { $this->middleware('auth:admin'); } public function index() { $items = Item::all(); return view('admin.item.index', ['items' => $items]); } public function add() { return view('admin.item.add'); } public function create(ItemRequest $request) { $item = new Item; $itam->product_name = $request->product_name; $item->price = $request->price; $item->stock = $request->stock; $item->explanaiona; $item->save(); return redirect(route('admin.item.index')); } }

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

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

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

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

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

guest

回答2

0

teratailに書いただけで分かるけどここのコード自体がおかしいのでそもそも動かない。

'Rule:unique('items')->ignore($this->id)'

必要なのはまともなエディタを使うことでは。
PhpStormとか使っていれば見ただけで間違ってると分かる。

投稿2020/09/27 05:36

kawax

総合スコア10377

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

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

0

ベストアンサー

名前付きルートを使うなら

{{route('admin.item.create')}}

使わないなら

'/admin/item/add'

投稿2020/09/27 05:10

zushi0905

総合スコア683

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

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

koako

2020/09/27 05:18

zushi0905さん回答ありがとうございます。 どちらも試したのですた送信できない状況です。
zushi0905

2020/09/27 05:43 編集

もう一方の回答かもしれないですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問