2016-06-17 71 views
0

我正在編寫資源控制器,並且我遇到了編輯方法的問題。Laravel 5.1 - 返回編輯頁面

我插入了驗證的形式,如果有錯誤返回來編輯郵件頁面,但會返回不工作好!

public function update(Request $request, $id) 
    { 
     $rules = [ 
      'title' => 'required', 
      'content' => 'required', 
      'image' => 'required',  
     ]; 

     $messages = [   
      'title.required' => 'Campo titolo richiesto', 
      'content.required' => 'Contenuto richiesto', 
      'image.required' => 'Campo immagine richiesto', 
     ]; 

     $validator = Validator::make($request->all(), $rules, $messages); 

     if ($validator->fails()){ 

     return redirect('admin/article/edit' , $id)->withErrors($validator); 

     }else { 


      $s = new Article; 



       $visible = (isset($_POST['visible']) == '1' ? '1' : '0'); 

       $data = array(

       'title'   => $request->get('title'), 
       'slug'   => $request->get('title'), 
       'content' => $request->get('content'), 
       'image'   => $request->get('image'), 
       'user_id'  => $request->get('user_id'), 
       'category_id' => $request->get('category_id'), 
       'visible'  => $visible, 
       ); 



      $s->where('id', '=', $id)->update($data); 
      return redirect('admin/article')->with('message', 'Articolo aggiornato con successo!'); 


     } 
    } 

它返回:

管理/條/編輯/ 5

不要將

管理/條/ 5 /編輯

我該如何解決這個問題?感謝您的幫助!

PS:$ ID做工精良,回到我的ID編輯

回答

1

這裏是重定向幫手。正如您在下面看到的,它將狀態作爲其第二個參數。

function redirect($to = null, $status = 302, $headers = [], $secure = null) 

你傳遞$id作爲第二個參數實際上是設置$status做些什麼。

您需要的$to參數傳遞像下面的完整路徑。

return redirect('admin/article/' . $id . '/edit')->withErrors($validator); 

我想你想生成與路線,這可以像下面實現的網址。

return redirect(route('admin.article.edit', compact($id)))->withErrors($validator); 
1

所以你說的redirect失敗並不重定向到正確的網址是什麼?你有沒有試過return redirect('admin/article/' . $id . '/edit')->withErrors($validator);

我沒有測試過這種方法,但也許return redirect()->back()->withErrors($validator);也可以工作。

0

這裏有

return redirect('admin/article/edit' , $id)->withErrors($validator); 

表示鏈路/路徑是管理/條/編輯/ $ ID(5或2或......)

更好地檢查

要做到這一點
return redirect('admin/article/' . $id . '/edit')->withErrors($validator); 
0

的一種方式,如其他人所說,就像是以下幾點:

return redirect("admin/article/{$id}/edit")->withErrors($validator); 

如果你已是「路由名稱」中定義,這樣的..

return redirect()->route('route.name',[$id])->withErrors($validator); 

這一切都取決於你如何喜歡,我喜歡後一個,看上去幹淨給我。

0

重定向到傳遞的網址:

return redirect('admin/article/' . $id . '/edit'); #admin/article/id/edit 
return redirect('admin/article/edit', $id); #admin/article/edit/5 

你也可以使用的方法來得到這個網址:

return redirect(action('[email protected]', compact($id))); 
0

最簡單的辦法:

Laravel 5.1有back()幫手,即返回上一頁:

return back()->withErrors($validator); 

更透徹的解釋:

如果您想更詳細,通常更強大的方式來重定向到一個途徑是,首先將其定義爲在routes.php具名的路線:

Route::get('admin/article/{article_id}/edit', ['as' => 'articles.edit', 'uses' => '[email protected]']); 
Route::bind('article_id', function($id, $route) { 
    return App\Article::whereId($id)->findOrFail(); 
} 

如果您使用的是Route::resource,那麼這已經自動爲您完成。要查找路由的名稱,請運行命令行php artisan route:list。然後,在你的控制器的方法,你怎麼稱呼它是這樣的:

return redirect()->route('articles.edit', ['article_id' => $id])->withErrors($validator); 

使用一種叫,Laravel會自動建立正確的URL爲您服務。這更健壯,因爲如果您想要更改該URL到其他位置或更改其調用的控制器方法,則只需將其更改爲一個位置即routes.php,而不是在代碼中的任何地方(只要每次引用該代碼中的路由是通過名稱引用的)。