我正在使用laravel构建一个简单的应用程序,并且我遇到了一个无法正常工作的重定向问题。我目前有一个注册表单,它发布到一个控制器方法,它调用模型上的静态方法,该方法将负责验证并将该用户保存到数据库。
到目前为止,这是我的代码。
routes.php文件
Route::get('/', function()
{
return View::make('index');
});
Route::post('/sign_up', 'userController@create_user');
userController.php
public function create_user()
{
$data = Input::all();
USER::validate($data);
}
user.php的
public static function validate($input)
{
$rules = array
(
'firstname' => 'Required|Min:3|Max:80|Alpha',
'lastname' => 'Required|Min:3|Max:80|Alpha',
'password' =>'Required|AlphaNum|Between:4,12|Confirmed',
'password_confirmation'=>'Required|AlphaNum|Between:4,12'
);
$v = Validator::make($input, $rules);
if( $v->passes() )
{
$user = new User;
$user->firstname = Input::get('firstname');
$user->lastname = Input::get('lastname');
$user->password = Input::get('password');
return var_dump($user); // Save user code here
}
return Redirect::to('/')->withErrors($v);
}
现在,我只是得到一个空白的屏幕。没有错误,我甚至可以改变重定向:到我想要的任何路线,即使是没有设置的路线,但仍然不会给出任何错误。
我确实设法让它对userController和User进行以下更改:
public function create_user()
{
$data = Input::all();
$response = USER::validate($data);
**if($response == 2)**
{
return Redirect::to('/');
}
}
user.php的
$v = Validator::make($input, $rules);
if( $v->passes() )
{
$user = new User;
$user->firstname = Input::get('firstname');
$user->lastname = Input::get('lastname');
$user->password = Input::get('password');
return var_dump($user);
}
return 2;
}
这可以按预期调用来自控制器而不是模型的重定向。
这引出了几个问题。
为什么它在控制器而不是模型中有效,有没有办法使它按照我原来的意图工作?
如果没有,我如何从验证中获取错误?
这是一种布置我的应用程序的糟糕方式吗?我试图维护模型中的逻辑步骤,但到目前为止,将它投入控制器并完成它似乎更容易。
感谢您的回复。
答案 0 :(得分:1)
您错过了控制器中的return
。你应该return
静态函数的结果。
但是,我会拆分它,这样你就可以拥有控制器中的所有东西,因为它非常简单。如果您有更多代码,可能需要考虑创建UserValidation class
。
另外,我将规则放在配置文件中,您可以从任何地方调用它们。这样,您就不会在验证中对规则进行硬编码,也可以在文件中编辑应用的所有验证规则。
控制器
public function create_user()
{
$data = Input::all();
USER::validate($data);
$v = Validator::make($input, \Config::get('Foo.Rules'));
if( $v->passes() )
{
self::insert_user($data);
}
return Redirect::to('/')->withErrors($v);
}
//This could be in a user validation class
public function insert_user($data){
$user = new User;
$user->firstname = Input::get('firstname');
$user->lastname = Input::get('lastname');
$user->password = Input::get('password');
return var_dump($user); // Save user code here
}
Config Foo
$rules = array
(
'firstname' => 'Required|Min:3|Max:80|Alpha',
'lastname' => 'Required|Min:3|Max:80|Alpha',
'password' =>'Required|AlphaNum|Between:4,12|Confirmed',
'password_confirmation'=>'Required|AlphaNum|Between:4,12'
),
答案 1 :(得分:0)
控制器是那个意味着返回响应的控制器,而不是验证器 - 您可能会将其传回控制器,然后让控制器返回它 - 但这并不是它的目的。
您可能会返回Validator对象本身:
return $this;
然后在您的控制器中,您可以收到错误消息
$error = $response->messages();