前提
バリデーションを未入力の際や文字数(min,max等で)で設定したはずが引っかかった際の警告メッセージが出る
プロフィール画面を編集して保存を押したら再度プロフィール画面に戻るようにしたいが、戻れない
実現したいこと
プロフィール画面の編集画面(edit.blade)の作成及び、編集後にプロフィール画面(show.blade)に上手く画面移動するようにしたいです。
プロフィールを書き換えて保存を押すと、条件をクリアしているはずがバリデーションで引っかかり警告?メッセージが出て、プロフィール情報を更新出来ず保存後に飛びたいビューページ(show.blade)にも飛べません。
これを名前やコメントに文字数で書き込める条件を付けて、メールアドレスもメールアドレスの正規の形(〇〇〇@co.jp等)以外の入力は弾かれるようにし、登録内容を変更して保存を押した後に編集画面からプロフィール画面に戻るようにしたいです。
不慣れなので情報として足りない部分やファイルがあればご指摘ください。すぐに追記します。
発生している問題・エラーメッセージ
field is required(バリデーションチェックのエラーメッセージ)、プロフィール画面に戻らない
該当のソースコード
laravel 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! | */ Auth::routes(); Route::get('/', function () { // return view('welcome'); return view('top'); }); // 投稿一覧 // Route::get('/posts', 'PostController@index'); // // 投稿追加フォーム // Route::get('/posts/create', 'PostController@create'); // // 投稿追加 // Route::post('/posts', 'PostController@store'); // // 投稿詳細 // Route::get('/posts/{id}', 'PostController@show'); // // 投稿更新フォーム // Route::get('/posts/{id}/edit', 'PostController@edit'); // // 投稿更新 // Route::patch('/posts/{id}', 'PostController@update'); // // 投稿削除 // Route::delete('posts', 'PostController@destroy'); // 上記の7つのルーティングを下の一つで同じ効果にできる // postsに関するリソースルーティングを行い、 // PostControllerの各アクションに紐づける Route::resource('posts', 'PostController'); Route::resource('likes', 'LikeController')->only([ 'index', 'store', 'destroy' ]); Route::resource('follows', 'FollowController')->only([ 'index', 'store', 'destroy' ]); Route::get('/folloow', 'FollowController@folloowerIndex'); Route::resource('comments', 'CommentController')->only([ 'store', 'destroy' ]); Route::get('/posts/{post}/edit_image', 'PostController@editImage')->name('posts.edit_image'); Route::patch('/posts/{post}/edit_image', 'PostController@updateImage')->name('posts.update_image'); Route::get('/users/{id}/edit', 'UserController@edit')->name('users.edit'); Route::patch('/users/{id}', 'UserController@update')->name('users.update'); Route::get('/users/{id}/edit_image', 'UserController@editImage')->name('users.edit_image'); Route::patch('/users/{id}/edit_image', 'UserController@updateImage')->name('users.update_image'); Route::resource('users', 'UserController')->only([ 'show', ]);
UserController.php(コントローラー) <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\User; use App\Http\Requests\UserRequest; class UserController extends Controller { public function show($id) { $user = User::find($id); return view('users.show',[ 'title' => 'プロフィール', 'user' => $user, ]); } public function edit(int $id) { $user = User::find($id); return view('users.edit',[ 'title' => 'プロフィール編集', 'user' => $user, ]); } public function update(int $id, UserRequest $request){ $user = User::find($id); $user->update($request->only(['name', 'email', 'profile'])); session()->flash('success', 'プロフィールを編集しました!'); return redirect()->route('users.show'); }
UserRequest.php <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class UserRequest 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 [ 'name' => ['required', 'min:2', 'max20'], 'email' => ['required',], 'profile' => ['required', 'min:2', 'max:50'], 'image' => [ 'required', 'file', 'image', 'mimes:jpeg,png', 'dimensions:min_width=50,min_height=50,max_width=200,max_height=200', ] ]; } }
show.blade.php(プロフィール画面のビュー) @extends('layouts.logged_in') @section('content') <h1>{{ $title }}</h1> <a href="{{ route('users.edit', Auth::user() )}}">編集</a> @if($user !== null) <div> 名前 {{ $user->name }} </div> <div> @if($user->image !== '') <img src="{{ asset('storage/' . $user->image) }}"> @else <img src="{{ asset('images/no_image.png') }}"> @endif <a href="{{ route('users.edit_image', $user) }}">画像を変更</a> </div> <div> <span>プロフィール</span> <ul> @if($user->profile) <li>{{ $user->profile }}</li> @else <li>プロフィールが設定されていません。</li> @endif </ul> </div> @else <p>設定されていません。</p> @endif @endsection
edit.blade.php(プロフィール編集画面のビュー) @extends('layouts.logged_in') @section('content') <h1>{{ $title }}</h1> <ul> <li><a href="/users">戻る</a></li> </ul> <form method="POST" action="{{ route('users.show', $user) }}"> @csrf @method('PATCH') <div> <label> 名前: <input type="text" name="name" value="{{ $user->name }}"> </label> </div> <div> <label> <input type="email" name="email" value="{{ $user->email }}"> </label> </div> <div> <label> <textarea type="text" name="log" rows="12" cols="50">{{ $user->profile }}</textarea> </label> </div> <input type="submit" value="保存"> </form> @endsection
試したこと
バリデーションの見直し、編集画面からプロフィール画面に飛ぶ際のルーティングのチェック。
補足情報(FW/ツールのバージョンなど)

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。