视图在Redirect ::上呈现,但在POST和表单验证后不显示

时间:2015-01-02 18:06:36

标签: angularjs post laravel laravel-4 routes

我有以下方法从角度控制器提交表单:

$scope.register = function() {
        var player = {
            email: $scope.email,
            password: $scope.password,
            username: $scope.username,
            name: $scope.playername
        }

        $http.post('register', player);
}

这很好用,以下路由处理此http请求(服务器端Routes.php):

Route::post('register', array('uses' => 'HomeController@doRegister'));

然后我的doRegister()方法中包含以下代码。这个想法是在推送到数据库之前验证表单输入。问题是,两个重定向都不起作用:

public function doRegister(){
        //Creates validator 
        $validator = Validator::make(Input::all(), $player);
        //In case it fails, redirect to the same form. But it doesn't work
        if ($validator->fails()) {
            return Redirect::to('register')->withErrors($validator)->withInput(Input::except('password'));      
        } else {
            //Creates new user and writes to database. Redirect doesn't work either...
            return Redirect::to('lobby')->withSuccess('Registered!');
        }
}

这真的很奇怪, 渲染视图。点击提交后: Laravel debugbar after submitting valid form values

知道为什么会这样吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

总结评论:

使用ajax时,常规重定向不起作用。通常情况下,浏览器会得到一个302响应,然后相应地重定向,但是angulars $ http.post将无能为力。你必须自己照顾好。

关于验证和错误消息,this answer显示了如何使用JSON将其发回。

这是一个简单的例子,取自上面链接的答案:

if ($validator->fails()){
    return Response::json(array(
        'success' => false,
        'errors' => $validator->getMessageBag()->toArray()
    ), 400);
}