teratail header banner
teratail header banner
質問するログイン新規登録
Laravel 6

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

Laravel

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

phpMyAdmin

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

Q&A

解決済

1回答

517閲覧

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

takigawa777

総合スコア21

Laravel 6

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

Laravel

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

phpMyAdmin

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

0グッド

1クリップ

投稿2022/10/02 08:01

0

1

前提

バリデーションを未入力の際や文字数(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イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

<textarea type="text" name="log" rows="12" cols="50">{{ $user->profile }}</textarea>

profileのはずなのにname="log"。

imageが必須なのにimageがない。

ついでにmax20も。

書いてる通りに動いてるだけ。

投稿2022/10/02 08:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問