自动重定向到索引页而不是所需的页面

时间:2016-02-04 11:04:31

标签: php validation laravel redirect

我的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');

   }
}

2 个答案:

答案 0 :(得分:1)

用于index路由和store路由的网址相同。不同之处在于该URL上使用的HTTP谓词。对URL的GET请求将带您到index,而对URL的POST请求将带您到store

store()方法中,当您return Redirect::route('taskController.store');时,route()方法会将参数转换为网址,然后向其发出GET请求。这就是您被重定向到index

的原因

通常,您的storeupdatedestroy路由不具有与之关联的视图。它们用于执行操作,然后重定向到包含视图的路径。

例如,创建新资源的一般工作流程是:

  1. create路由显示了具有
  2. 形式的创建视图
  3. 将POST格式化为store路线,
  4. store路由尝试创建新资源
  5. 如果验证失败,store路由会重定向回create路由并显示错误,
  6. 如果资源创建成功,store路由将重定向到show路由,并使用新创建的资源的ID。
  7. 编辑资源的工作流程类似:

    1. edit路线显示编辑视图,其格式为
    2. 将PUT格式化为update路线,
    3. update路由尝试编辑资源
    4. 如果验证失败,update路由会重定向回edit路由并显示错误,
    5. 如果资源修改成功,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

   }
}