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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

470閲覧

【php】【laravel】役割付与設定後新規登録できない

kpby2751

総合スコア19

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/10/10 03:05

編集2022/10/11 09:56

前提

phpのlaravelというフレームワークを使用しています。現在ユーザーの新規登録しようにも、ユーザー情報が登録されず更に新規登録画面から移動しない状態です。

今まで登録ができていたのですが、あるアカウントを削除して再度違うアカウントを新規登録させようとしたときに起こりました。既存のユーザーについてはログイン画面からログインすることができます。役割を自動で付与できるようにした後にユーザーの新規登録を行っていないので、もしかしたらその辺りでミスがあったのかもしれません。

Roleテーブルで

id=1 => 'admin'
id=2 => 'user'

と、役割を割り当て、Role_UserテーブルをRole、User間の中間テーブルとしています。また下記のAuthServiseProvider.phpにある通り、新規登録時に自動でid=2が付与されるようにしています。

実現したいこと

新規登録でいるようにしたいです。

ソースコード

RoleController.php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Models\Role; 7use App\Models\User; 8 9class RoleController extends Controller 10{ 11 public function attach(Request $request, User $user) { 12 $roleId = request()->input('role'); 13 $user->roles()->attach($roleId); 14 return back(); 15 } 16 public function detach(Request $request, User $user) { 17 $roleId = request()->input('role'); 18 $user->roles()->detach($roleId); 19 return back(); 20 } 21}

AuthServiseProvider.php

1<?php 2 3namespace App\Providers; 4 5use Illuminate\Support\Facades\Gate; 6use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; 7 8class AuthServiceProvider extends ServiceProvider 9{ 10 protected $policies = [ 11 App\Models\Post::class => App\Policies\PostPolicy::class, 12 App\Models\Comment::class => App\Policies\CommentPolicy::class, 13 App\Models\User::class => App\Policies\UserPoliciy::class, 14 15 ]; 16 17 public function boot() 18 { 19 $this->registerPolicies(); 20 21 Gate::define('admin',function($user) { 22 foreach ($user->roles as $role) { 23 if ($role->name == 'admin') { 24 return true; 25 } 26 } 27 return false; 28 }); 29 } 30}

ResisteredUserController.php

1<?php 2 3namespace App\Http\Controllers\Auth; 4 5use App\Http\Controllers\Controller; 6use App\Models\User; 7use App\Providers\RouteServiceProvider; 8use Illuminate\Auth\Events\Registered; 9use Illuminate\Http\Request; 10use Illuminate\Support\Facades\Auth; 11use Illuminate\Support\Facades\Hash; 12use Illuminate\Validation\Rules; 13 14class RegisteredUserController extends Controller 15{ 16 public function create() 17 { 18 return view('auth.register'); 19 } 20 public function store(Request $request) 21 { 22 $request->validate([ 23 'name' => ['required', 'string', 'max:255'], 24 'avatar' => ['required','image','max:1204'], 25 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 26 'password' => ['required', 'confirmed', Rules\Password::defaults()], 27 ]); 28 29 $attr =[ 30 'name' => $request->name, 31 'email' => $request->email, 32 'password' => Hash::make($request->password), 33 ]; 34 35 //avatarの保存 36 if(request()->hasFile('avatar')) { 37 $name = request()->file('avatar')->getClientOriginalName(); 38 $avatar = date('Ymd_His').'_'.$name; 39 request()->file('avatar')->storeAs('public/avatar', $avatar); 40 //avatarファイル名をデータに追加 41 $attr['avatar']=$avatar; 42 } 43 44 $user=User::create($attr); 45 46 event(new Registered($user)); 47 48 $user->roles()->attach(2); 49 50 Auth::login($user); 51 52 return redirect(RouteServiceProvider::HOME); 53 } 54}

register.blade.php

1<x-guest-layout> 2 <x-auth-card> 3 <x-slot name="logo"> 4 <a href="/"> 5 <x-application-logo class="w-20 h-20 fill-current text-gray-500" /> 6 </a> 7 </x-slot> 8 9 <form method="POST" action="{{ route('register') }}"enctype="multipart/form-data"> 10 @csrf 11 12 <!-- Name --> 13 <div> 14 <x-input-label for="name" :value="__('Name')" /> 15 16 <x-text-input id="name" class="block mt-1 w-full" type="text" name="name" :value="old('name')" required autofocus /> 17 18 <x-input-error :messages="$errors->get('name')" class="mt-2" /> 19 </div> 20 21 <!-- Email Address --> 22 <div class="mt-4"> 23 <x-input-label for="email" :value="__('Email')" /> 24 25 <x-text-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required /> 26 27 <x-input-error :messages="$errors->get('email')" class="mt-2" /> 28 </div> 29 30 <!-- Avatar --> 31 <div class="mt-4"> 32 <x-input-label for="avatar" :value="__('プロフィール画像(任意・1MBまで)')" /> 33 34 <x-text-input id="avatar" class="block mt-1 w-full rounded-none" type="file" name="avatar" :value="old('avatar')" /> 35 </div> 36 37 <!-- Password --> 38 <div class="mt-4"> 39 <x-input-label for="password" :value="__('Password')" /> 40 41 <x-text-input id="password" class="block mt-1 w-full" 42 type="password" 43 name="password" 44 required autocomplete="new-password" /> 45 46 <x-input-error :messages="$errors->get('password')" class="mt-2" /> 47 </div> 48 49 <!-- Confirm Password --> 50 <div class="mt-4"> 51 <x-input-label for="password_confirmation" :value="__('Confirm Password')" /> 52 53 <x-text-input id="password_confirmation" class="block mt-1 w-full" 54 type="password" 55 name="password_confirmation" required /> 56 57 <x-input-error :messages="$errors->get('password_confirmation')" class="mt-2" /> 58 </div> 59 60 <div class="flex items-center justify-end mt-4"> 61 <a class="underline text-sm text-gray-600 hover:text-gray-900" href="{{ route('login') }}"> 62 {{ __('Already registered?') }} 63 </a> 64 65 <x-primary-button class="ml-4"> 66 {{ __('Register') }} 67 </x-primary-button> 68 </div> 69 </form> 70 </x-auth-card> 71</x-guest-layout> 72

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

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

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

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

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

kpby2751

2022/10/10 05:41 編集

コードregister.blade.phpを追加しました。
guest

回答1

0

自己解決

お騒がせしました。
ResisteredUserController.php
のアバター登録

'avatar' => ['required','image','max:1204'],


'required'
としていたことから、必須項目としていました。しかし必須項目にしていたとは思わずアバター無しで登録しようとしていました。ヴァリデーションを付ければ良かったと感じます。

投稿2022/10/11 00:56

kpby2751

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問