### フォームでの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を使用するやり方も行ったのですが変わりませんでした。
どなたかご教授頂けると幸いです。
- フォームの作成 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')); } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。