我的laravel应用程序中有一个 taskController控制器。在我的资源文件夹中,我在 resource / views / taksController /
下有三个页面1.index.blade
2.store.blade
3.create.blade ..
在我的 create.blad ei中有一个表单,提交后将进行验证,如果成功,我希望将其重定向到 store.blade ,否则将再次重定向到 create.blade 以再次填写表单。但在我的程序中,成功时它不会将我重定向到 store.blade 文件,而是将我重定向到index.blade。为什么会发生这种情况?我怎么能解决这个问题?
我正在使用laravel 5.2
在我的route.php中,我添加了控制器,如
Route::resource('taskController','taskController');
在taskController中控制器内的验证逻辑如下:
public function index()
{
//
return View::make('taskController.index');
}
public function create()
{
//
return View::make('taskController.create');
}
public function store(Request $request)
{
$rules = array(
'email' => 'required|email', // required and must be unique in the ducks table
'comment' => 'required',
'agree' => 'required|accepted' // required and has to match the password field
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
// get the error messages from the validator
$messages = $validator->messages();
echo 'bal';
// redirect our user back to the form with the errors from the validator
return Redirect::route('taskController.create');
}else{
return Redirect::route('taskController.store');
}
}
答案 0 :(得分:1)
用于index
路由和store
路由的网址相同。不同之处在于该URL上使用的HTTP谓词。对URL的GET请求将带您到index
,而对URL的POST请求将带您到store
。
在store()
方法中,当您return Redirect::route('taskController.store');
时,route()
方法会将参数转换为网址,然后向其发出GET请求。这就是您被重定向到index
。
通常,您的store
,update
和destroy
路由不具有与之关联的视图。它们用于执行操作,然后重定向到包含视图的路径。
例如,创建新资源的一般工作流程是:
create
路由显示了具有store
路线,store
路由尝试创建新资源store
路由会重定向回create
路由并显示错误,store
路由将重定向到show
路由,并使用新创建的资源的ID。编辑资源的工作流程类似:
edit
路线显示编辑视图,其格式为update
路线,update
路由尝试编辑资源update
路由会重定向回edit
路由并显示错误,update
路由会重定向到show
路由,其中包含已修改资源的ID。答案 1 :(得分:0)
我认为你应该这样:
public function index(){
return view('taksController.index');
}
public function create(){
return view('taksController.create');
}
public function store(Request $request)
{
//
$rules = array(
'email' => 'required|email', // required and must be unique in the ducks table
'comment' => 'required',
'agree' => 'required|accepted' // required and has to match the password field
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
// get the error messages from the validator
$messages = $validator->messages();
//echo 'bal';
// redirect our user back to the form with the errors from the validator
return Redirect::route('taskController.create');
}else{
return view('taksController.store');// redirects me to index.blade instead of store.blade
}
}