视图在 Redirect::to 上呈现,但在 POST 和表单验证后不显示
View is rendered on Redirect::to but not displaying after POST and form validation
我有以下方法从 angular 控制器提交表单:
$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() 方法中有以下代码。这个想法是在推送到数据库之前验证表单输入。问题是,两个重定向中的 none:
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!');
}
}
真正奇怪的是它确实呈现了视图。点击提交后:
知道为什么会这样吗?提前致谢。
评论总结:
传统重定向在使用 ajax 时不起作用。通常浏览器会收到 302
响应,然后相应地重定向,但是 angulars $http.post 什么都不做。你必须自己处理。
关于验证和错误消息,this answer 展示了如何使用 JSON 将它们发回。
这是从上面链接的答案中提取的一个简单示例:
if ($validator->fails()){
return Response::json(array(
'success' => false,
'errors' => $validator->getMessageBag()->toArray()
), 400);
}
我有以下方法从 angular 控制器提交表单:
$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() 方法中有以下代码。这个想法是在推送到数据库之前验证表单输入。问题是,两个重定向中的 none:
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!');
}
}
真正奇怪的是它确实呈现了视图。点击提交后:
知道为什么会这样吗?提前致谢。
评论总结:
传统重定向在使用 ajax 时不起作用。通常浏览器会收到 302
响应,然后相应地重定向,但是 angulars $http.post 什么都不做。你必须自己处理。
关于验证和错误消息,this answer 展示了如何使用 JSON 将它们发回。
这是从上面链接的答案中提取的一个简单示例:
if ($validator->fails()){
return Response::json(array(
'success' => false,
'errors' => $validator->getMessageBag()->toArray()
), 400);
}