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

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

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

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

Laravel

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

解決済

Laravelのバリデーションの書き方、フォーム画面の作成について

takigawa777
takigawa777

総合スコア19

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

Laravel

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

1回答

0リアクション

1クリップ

181閲覧

投稿2022/10/02 08:01

前提

バリデーションを未入力の際や文字数(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/ツールのバージョンなど)

Windows10、cloud9、Laravel6イメージ説明

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

Laravel

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。