Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用户注册时,Laravel Breeze和Spatial权限设置角色_Php_Laravel_Laravel 8_Spatie - Fatal编程技术网

Php 用户注册时,Laravel Breeze和Spatial权限设置角色

Php 用户注册时,Laravel Breeze和Spatial权限设置角色,php,laravel,laravel-8,spatie,Php,Laravel,Laravel 8,Spatie,我正在使用LaravelBreeze作为一个Auth脚手架包,以及Spatiale的LaravelPermissions。我已经创建了两个注册表单,一个用于“学生”,另一个用于“教师”。所有注册视图都位于RegisteredUserController中 app\Http\Controllers\Auth\RegisteredUserController.php <?php namespace App\Http\Controllers\Auth; use App\Http\Contro

我正在使用LaravelBreeze作为一个Auth脚手架包,以及Spatiale的LaravelPermissions。我已经创建了两个注册表单,一个用于“学生”,另一个用于“教师”。所有注册视图都位于RegisteredUserController中

app\Http\Controllers\Auth\RegisteredUserController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Models\Frontend\User;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

class RegisteredUserController extends Controller
{
    /**
     * Display the registration view for student.
     *
     * @return \Illuminate\View\View
     */
    public function createSudent()
    {
        return view('auth.student.student-space');
    }
    
    /**
     * Display the registration view for teacher.
     *
     * @return \Illuminate\View\View
     */
    public function createTeacher()
    {
        return view('auth.teacher.teacher-space');
    }

    /**
     * Handle an incoming registration request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|confirmed|min:8',
        ]);

        Auth::login($user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]));
        
        // Create roles
        
        $create_sponsor_role = Role::create(['name' => 'student']);
        $create_project_role = Role::create(['name' => 'teacher']);
        
        // Assigning roles
        
        $user->assignRole(['student', 'teacher']);
        
        // Check if it's correct roles
        
        if($user()->hasRole('sponsor')) {
            return redirect()->intended('/student/dashboard');
        }
        
        if ($user()->hasRole('project')) {
            return redirect()->intended('/teacher/dashboard');
        }
        
        else {
            return redirect('/signin');
        }
        
        event(new Registered($user));
    }
}
<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Auth\RegisteredUserController;

Route::get('/student-space', [RegisteredUserController::class, 'createStudent'])->middleware('guest')->name('student-space');

Route::get('/teacher-space', [RegisteredUserController::class, 'createTeacher'])->middleware('guest')->name('teacher-space');

这里我为您介绍一个简单的设置:

播种你的角色 如果您使用的是Spatial laravel权限。首先,您需要在数据库中有一些角色。可以通过编写crud并在管理面板中对其进行控制或将其植入数据库中来实现。我在这里为它写种子

对于您的案例,我创建了两个角色:编写者和发布者:

  • 通过运行
    php artisan make:seeder RoleTableSeeder创建RoleTableSeeder播种机
  • 在Database\Seeders\DatabaseTableSeeder中调用播种器,如下所示:
  • 在播种机中编写角色,如下所示:
  • 通过调用php artisan db:seed运行播种机
  • 注册用户并提供角色 您应该像在问题中所做的那样,将用户引导到正确的视图刀片。 角色创建后必须分配给用户。在这里,你需要一个逻辑来区分它是作家还是出版商?我建议在表单中为角色添加一个隐藏的输入。如果为true,您可以指定例如writer角色,并根据需要使用
    required\u(如果此处解释了
    方法)创建一些字段

    您应该在创建后给用户一个角色

    use Illuminate\Validation\Rule;
    
    public function store(Request $request)
    {
        $request->validate([
            'name'         => 'required|string|max:255',
            'custom_field' => [Rule::requiredIf($request->role)],
            'email'        => 'required|string|email|max:255|unique:users',
            'password'     => 'required|string|confirmed|min:8',
        ]);
    
        Auth::login($user = User::create([
            'name'     => $request->name,
            'email'    => $request->email,
            'password' => Hash::make($request->password),
        ]));
    
        $role = $request->get('role')
            ? Spatie\Permission\Models\Role::findByName('writer')
            : Spatie\Permission\Models\Role::findByName('publisher');
    
        $user->assignRole($role);
    
        event(new Registered($user));
    
        return redirect(RouteServiceProvider::HOME);
    }
    

    在此,我将为您介绍一个简单的设置:

    播种你的角色 如果您使用的是Spatial laravel权限。首先,您需要在数据库中有一些角色。可以通过编写crud并在管理面板中对其进行控制或将其植入数据库中来实现。我在这里为它写种子

    对于您的案例,我创建了两个角色:编写者和发布者:

  • 通过运行
    php artisan make:seeder RoleTableSeeder创建RoleTableSeeder播种机
  • 在Database\Seeders\DatabaseTableSeeder中调用播种器,如下所示:
  • 在播种机中编写角色,如下所示:
  • 通过调用php artisan db:seed运行播种机
  • 注册用户并提供角色 您应该像在问题中所做的那样,将用户引导到正确的视图刀片。 角色创建后必须分配给用户。在这里,你需要一个逻辑来区分它是作家还是出版商?我建议在表单中为角色添加一个隐藏的输入。如果为true,您可以指定例如writer角色,并根据需要使用
    required\u(如果此处解释了
    方法)创建一些字段

    您应该在创建后给用户一个角色

    use Illuminate\Validation\Rule;
    
    public function store(Request $request)
    {
        $request->validate([
            'name'         => 'required|string|max:255',
            'custom_field' => [Rule::requiredIf($request->role)],
            'email'        => 'required|string|email|max:255|unique:users',
            'password'     => 'required|string|confirmed|min:8',
        ]);
    
        Auth::login($user = User::create([
            'name'     => $request->name,
            'email'    => $request->email,
            'password' => Hash::make($request->password),
        ]));
    
        $role = $request->get('role')
            ? Spatie\Permission\Models\Role::findByName('writer')
            : Spatie\Permission\Models\Role::findByName('publisher');
    
        $user->assignRole($role);
    
        event(new Registered($user));
    
        return redirect(RouteServiceProvider::HOME);
    }
    

    错误类“App\Models\Role”在将帐户注册为“Writer”后未找到。我不想使用数据库中的种子。我想使用注册表创建自己的凭据使用空间角色类。我已经更新了答案。您应该将角色添加到数据库中。通过种子设定或其他您喜欢的方式感谢您的帮助,但返回重定向(RouteServiceProvider::HOME);这仅适用于“Writer”而非“Publisher”的一个注册表单错误类“App\Models\Role”在注册帐户为“Writer”后未找到我不想使用数据库种子我想使用注册表单创建我自己的凭据使用空间角色类。我已经更新了答案。您应该将角色添加到数据库中。通过种子设定或其他您喜欢的方式感谢您的帮助,但返回重定向(RouteServiceProvider::HOME);“作者”而非“出版商”只能填写一份登记表你不应该在每个注册请求上创建角色我花了两天时间试图解决这个问题,但没有任何效果我希望有人能帮助我你不应该在每个注册请求上创建角色我花了两天时间试图解决这个问题,但没有任何效果我希望有人能帮助我
    use Illuminate\Validation\Rule;
    
    public function store(Request $request)
    {
        $request->validate([
            'name'         => 'required|string|max:255',
            'custom_field' => [Rule::requiredIf($request->role)],
            'email'        => 'required|string|email|max:255|unique:users',
            'password'     => 'required|string|confirmed|min:8',
        ]);
    
        Auth::login($user = User::create([
            'name'     => $request->name,
            'email'    => $request->email,
            'password' => Hash::make($request->password),
        ]));
    
        $role = $request->get('role')
            ? Spatie\Permission\Models\Role::findByName('writer')
            : Spatie\Permission\Models\Role::findByName('publisher');
    
        $user->assignRole($role);
    
        event(new Registered($user));
    
        return redirect(RouteServiceProvider::HOME);
    }