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

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

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

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

PHP

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

解決済

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

kpby2751
kpby2751

総合スコア19

Laravel

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

PHP

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

1回答

0グッド

0クリップ

235閲覧

投稿2022/10/10 03:05

編集2022/10/10 05:39

前提

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

以下のような質問にはグッドを送りましょう

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

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

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

kpby2751

2022/10/10 05:41 編集

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

回答1

0

自己解決

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

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


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

投稿2022/10/11 00:56

kpby2751

総合スコア19

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Laravel

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

PHP

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