Laravel自定义注册路由/逻辑

时间:2016-09-06 10:02:24

标签: laravel laravel-5.2

我想在我的Auth控制器中覆盖Laravel 5.2的public function postRegister()

我首先改变路线:

Route::post('/auth/register', 'Auth\AuthController@postRegisterI');

在我的Auth控制器中,我现在有了这个新的postRegisterI()方法,反对依赖基础postRegister()。但我对这种新方法的改变似乎并不适用?

由于某种原因,它仍然指向postRegister()吗?我的AuthController看起来像这样:

class AuthController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Registration & Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users, as well as the
    | authentication of existing users. By default, this controller uses
    | a simple trait to add these behaviors. Why don't you explore it?
    |
    */

    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */

    public function __construct()
    {
        $this->middleware('guest', ['except' => 'getLogout']);
    }

    public function postRegisterI(Request $request)
    {
        return print_r($request);
        $validator = $this->validator($request->all());

        if ($validator->fails()) {
            $this->throwValidationException(
                $request, $validator
            );
        }

        //Auth::login($this->create($request->all()));
        $this->create($request->all());
        //return redirect($this->redirectPath());
        return;
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255|unique:users',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|confirmed|min:2',
        ]);
    }

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

例如,在我向/auth/register/发出的ajax请求中,它在我指示的情况下从不回复我的回复,它也一直试图将我重定向到/home。我这样做是因为我没有传递/auth/register表单,而是传递了一个包含数据的Javascript数组,不仅创建了用户(电子邮件,密码等),还提供了用户需要加入的应用程序

最终,我想在创建用户时创建包含该数据的Application模型,但是现在我不确定我的函数是否被正确调用!

编辑:因此,看起来 __construct() 功能导致问题...我应该摆脱它吗?我不明白为什么我需要发表评论以从postRegisterI()获得我的回报?

2 个答案:

答案 0 :(得分:0)

首先,确保在调用Route::auth()之前声明了新路线。否则,Laravel将忽略您的添加,并将始终调用Easy Auth附带的那个。 第二。为什么要使用具有不同名称的其他方法覆盖方法?只需在AuthController中创建一个方法postRegister,您就会自动覆盖驻留在Trait中的方法。因此,您不必担心必须添加其他方法和路线。除非你想拥有一个多身份验证系统,在这种情况下,这不是正确的解决方案。

另一方面,对于ajax请求,请确保验证请求的类型为ajax:

if ($request->ajax()){
//Code here
return response()->json([],200);
}

此控制器用于检查注册规则,创建用户以及重定向到重定向路径。它不是为ajax处理而设计的,因此,您需要为它添加代码

答案 1 :(得分:-1)

也许这个主题可以帮助你custom register