首页 文章

Laravel 5.6将注册表移动到模态弹出窗口

提问于
浏览
0

我正在尝试将前端HTML模板与后端Laravel应用程序结合使用 . 我正在尝试将默认的注册和登录表单移动到模板模式弹出注册/登录表单中 .

登录部分按预期工作,无需修改原始控制器或路由 .

但是,注册似乎主要是工作,而不是有时重新定向到 example.com/path 注册后它显示

抱歉,找不到您要查找的页面 .

奇怪的是,它有时让我注册,然后停止工作其他时间 .

RegistersUsers.php

<?php

namespace Illuminate\Foundation\Auth;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Auth\Events\Registered;

trait RegistersUsers
{
    use RedirectsUsers;


    public function showRegistrationForm()
    {
        return view('auth.register');
    }


    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        return $this->registered($request, $user)
                        ?: redirect($this->redirectPath());
    }

    protected function guard()
    {
        return Auth::guard();
    }

    protected function registered(Request $request, $user)
    {
        //
    }
}

RegisterController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Models\User;
use App\Http\Controllers\Controller;
use Illuminate\Auth\Events\Registered;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Jrean\UserVerification\Traits\VerifiesUsers;
use Jrean\UserVerification\Facades\UserVerification;
use Illuminate\Http\Request;
use MetaTag;

class RegisterController extends Controller
{

    use RegistersUsers;
    use VerifiesUsers;

    protected $redirectTo = '/';

    public function __construct()
    {
        $this->middleware('guest');
    }

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
        ]);
    }

    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }

    protected function redirectTo() {
        return '/path';
    }


    public function showRegistrationForm()
    {
        MetaTag::set('title', __("Register"));
        session()->put('from', request('redirect')?:url()->previous());

        return view('auth.register');
    }

    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        $user = $this->create($request->all());

        event(new Registered($user));

        $this->guard()->login($user);

        $user->username = $request->get('name');
        $user->save();

        UserVerification::generate($user);

        UserVerification::send($user, __('Welcome and Email Verification'));

        $user->assignRole('member'); //make a member

        return $this->registered($request, $user)
            ?: redirect(session()->pull('from',$this->redirectPath()));
    }
}

1 回答

  • 0

    你有两个选择:

    • 如果要使用默认行为(=已注册后重定向),可以将函数 redirectPath 的返回值更改为相应的路径 .

    • 如果您想要其他行为(例如返回json ...),您可以更改函数 registered 的内容 .

    请注意,根据您的返回值,会有不同的行为:

    • 如果在转换为布尔值时返回值为 true 的值:将被视为响应 .

    • 如果在转换为布尔值时返回值为 false 的值:将 not 视为响应,并且laravel将回退以重定向 redirectPath 函数的值(如1.) .

    如果您想在用户注册后执行某些操作但仍使用默认重定向,则此行为非常有用 .

相关问题