Как перенаправить нового пользователя на страницу редактирования профиля

#laravel

#laravel

Вопрос:

У меня здесь проблема. Когда новый пользователь регистрируется, я хочу перенаправить его / ее на страницу редактирования профиля… как мне изменить контроллер входа для перенаправления на эту страницу?

вот мой RegisterController

 <?php

namespace AppHttpControllersAuth;

use AppHttpControllersController;
use AppProvidersRouteServiceProvider;
use AppUser;
use IlluminateFoundationAuthRegistersUsers;
use IlluminateSupportFacadesHash;
use IlluminateSupportFacadesValidator;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/profiles/'.$user->id.'/edit';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return IlluminateContractsValidationValidator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'type' => ['required'],
            'name' => ['required', 'string', 'max:255'],
            'last_name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'phone' => ['required', 'string', 'max:15', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

    

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return AppUser
     */
    protected function create(array $data)
    {
        $user = User::create([
            'name' => $data['name'],
            'last_name' => $data['last_name'],
            'email' => $data['email'],
            'phone' => $data['phone'],
            'type' => $data['type'],
            'password' => Hash::make($data['password']),
        ]);
        
            if($data['type'] == 'Learner'){
                $user->attachRole('learner');
                return $user;
            }
            elseif($data['type'] == 'Guardian'){
                $user->attachRole('guardian');
                return $user;
            }
            elseif($data['type'] == 'Teacher'){
                $user->attachRole('teacher');
                return $user;
            }
    }
}
  

edit.blade.php

 @extends('layouts.admin')

@section('main-content')
    <!-- Page Heading -->
    <h1 class="h3 mb-4 text-gray-800">{{ $user->name }} {{$user->last_name}}</h1>
    <hr/>
    @if (session('message'))
    <div class="alert alert-success border-left-success alert-dismissible fade show" role="alert">
        {{ session('message') }}
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
            <span aria-hidden="true">amp;times;</span>
        </button>
    </div>
    @endif
    

    <form method="POST" action="{{ route('profiles.update', $user->id) }}">
        @csrf
        @method('PATCH')
        <div class="row">
            <div class="col-md-9">
                <div class="card shadow mb-4 px-4 pb-4">
                    <div class="card-header py-3 px-0">
                        <h6 class="m-0 font-weight-bold text-primary">User Information</h6>
                    </div>
                    @if(Auth::user()->hasRole(['superadministrator', 'administrator']))
                    <div class="row my-2">
                            <div class="col-md-2 font-weight-bold pt-2">Role:</div>
                            <div class="col-md-10">
                                <div class="form-group">
                                    <select id="role" name="role" class="form-control @error('role') is-invalid @enderror" value="{{ old('role') }}">
                                        <option value="">Choose user role...</option>
                                            @foreach($roles as $role)
                                                <option value="{{ $role->display_name }}" {{ $user->hasRole($role->name) ? 'selected' : '' }}>{{ $role->display_name }}</option>
                                            @endforeach
                                    </select>
                                    @error('role')
                                        <span class="invalid-feedback" role="alert">
                                            <strong>{{ $message }}</strong>
                                        </span>
                                    @enderror
                                </div>
                            </div>
                        </div>

. . . . .
  

Пользователь должен перейти на эту страницу после регистрации, а не в домашний каталог… пожалуйста, помогите

Комментарии:

1. Что-то не работает? Вы получаете какие-либо ошибки?

Ответ №1:

В методе create измените переменную перенаправления следующим образом:

 /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return AppUser
     */
    protected function create(array $data)
    {
        $user = User::create([
            'name' => $data['name'],
            'last_name' => $data['last_name'],
            'email' => $data['email'],
            'phone' => $data['phone'],
            'type' => $data['type'],
            'password' => Hash::make($data['password']),
        ]);

        // change redirect variable
        $this->redirectTo = '/profiles/'.$user->id.'/edit';
        
            if($data['type'] == 'Learner'){
                $user->attachRole('learner');
                return $user;
            }
            elseif($data['type'] == 'Guardian'){
                $user->attachRole('guardian');
                return $user;
            }
            elseif($data['type'] == 'Teacher'){
                $user->attachRole('teacher');
                return $user;
            }

        
    }
  

Ответ №2:

Решение :

  • Создайте миграцию, как добавить $table->boolean('profil_edited')->default(0);
  • Обновите свою модель, чтобы добавить это поле в $fillable массив
  • Проверьте это значение :
    • когда пользователи входят в систему и перенаправляют пользователя на страницу профиля
    • или в middleware

Комментарии:

1. Вопрос о перенаправлении после регистрации , а не входа в систему. И у вновь созданного пользователя, скорее всего, не profil_edited установлено ничего, кроме 0