Laravel 5.1 - 返回编辑页面

时间:2016-06-17 13:51:36

标签: php laravel laravel-5.1

我正在编写资源控制器,我遇到编辑方法的问题。

我插入了验证器表单,如果有错误返回编辑页面的消息,但RETURN不能正常工作!

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工作正常,返回我的身份编辑

6 个答案:

答案 0 :(得分:1)

所以你说plugin: "edu.sc.seis.launch4j"失败后没有重定向到正确的网址?你试过redirect吗?

我还没有测试过这种方法,但也许return redirect('admin/article/' . $id . '/edit')->withErrors($validator);也可以使用。

答案 1 :(得分: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);

答案 2 :(得分:0)

你有

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

表示链接/路线为 admin / article / edit / $ id (5或2或......)

更好的检查

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

答案 3 :(得分:0)

正如其他人所建议的那样,实现此目的的一种方法如下:

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

或者如果你有一个"路线名称"定义,像这样..

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

这一切都取决于你喜欢的方式,我更喜欢后者,看起来很干净。

答案 4 :(得分:0)

重定向转到传递的网址:

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

您可以使用方法获取此网址:

return redirect(action('Controller@update', compact($id)));

答案 5 :(得分:0)

最简单的解决方案:

Laravel 5.1有一个back()助手,返回上一页:

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

更全面的解释:

如果您想要更详细,通常更强大的方法来重定向到路线是首先将其定义为routes.php中的命名路线:

Route::get('admin/article/{article_id}/edit', ['as' => 'articles.edit', 'uses' => 'ArticlesController@edit']);
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,而不是代码中的任何位置(只要因为代码中对该路由的每次引用都是通过名称引用它。