前提・実現したいこと
laravel初学者です。
Twitter風のアプリを作成中です。
先程、バリデーションを作成しました。
バリデーションは上手く反映されますが投稿しても反映できず尚且つバリデーションのメッセージが出ます。
発生している問題
該当のソースコード
OnlineReviewsController <?php namespace App\Http\Controllers; use App\Models\OnlineReviews; use Illuminate\Http\Request; use App\Models\User; use Illuminate\Support\Facades\DB; use App\Http\Requests\StoreOnlineReviews; class OnlineReviewsController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(StoreOnlineReviews $request) { $review = new OnlineReviews; $review->user_id = $request->user()->id; $review->title = $request->input('title'); $review->text = $request->input('text'); $review->save(); return redirect()->route('shop.show'); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { $review = OnlineReviews::find($id); return view('online_reviews.show',compact('review')); }
shop_show.blade.php @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form method="POST" action="{{ route('online_reviews.store')}}"> @csrf <div class="form-group"> <input type="text" class="form-control" name="subject" placeholder="タイトル" > </div> <div class="form-group"> <textarea class="form-control" name="message" rows="5" placeholder="投稿内容を入れて下さい"></textarea> </div> <a href="{{ route('shop.list') }}">一覧に戻る</a> <button type="submit" class="btn btn-success btn-block">投稿する</button> </form>
StoreOnlineReviews.php //バリデーションのファイルです。 <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreOnlineReviews 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 [ // 'title' => 'required|char|max:50', 'text' => 'required|char|max:70' ]; } }
投稿のマイグレーションファイル <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateOnlineReviewsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('online_reviews', function (Blueprint $table) { $table->bigIncrements('id'); $table->char('title',50);//タイトル $table->char('text',70); //クチコミ 70文字に制限 $table->unsignedBigInteger('user_id'); //user_idの外部キー $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');//user_idの外部キーの制約と投稿者が削除されたらその投稿も削除できるように紐付け $table->unsignedBigInteger('hospital_id'); //user_idの外部キー 現在なしで登録可能にしている $table->foreign('hospital_id')->references('id')->on('users')->onDelete('cascade');//user_idの外部キーの制約と投稿者が削除されたらその投稿も削除できるように紐付け $table->timestamps(); }); }
試したこと
投稿内容がDBに入っていないのでOnlineReviewsControllerの変数の受け渡しの確認。
また、投稿ページのshop_show.blade.phpこちらの
<form method="POST" action="{{ route('online_reviews.store')}}">
を確認しました。他にどこを確認すればいいのかご教授のほど宜しくお願いします。
//web.php Route::get('/', function () { return view('welcome'); }); //ログイン機能 Auth::routes(); Route::get('/home', 'HomeController@index')->name('home'); //OnlineReviewsのルーティングと // ログインしないとページに遷移できないようにmiddlewareを記述 Route::group(['prefix' => 'online_reviews','middleware' => 'auth'], function(){ Route::get('index','OnlineReviewsController@index')->name('online_reviews.index'); // 投稿一覧表 Route::get('create','OnlineReviewsController@create')->name('online_reviews.create');//投稿ページの表示 Route::post('store','OnlineReviewsController@store')->name('online_reviews.store');//投稿を保存するルーティング Route::get('show/{id}','OnlineReviewsController@show')->name('online_reviews.show');//投稿の詳細を確認するルーティング }); //shopのルーティング Route::group(['prefix' => 'shop'],function(){ Route::get('index','ShopController@index')->name('shop.list'); Route::get('show','ShopController@show')->name('shop.show');//お店の詳細を確認する });
補足情報(FW/ツールのバージョンなど)
laravel 6.20
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/04 10:52 編集
2021/02/04 11:13
2021/02/04 11:19
2021/02/05 15:20