我正在编写资源控制器,我遇到编辑方法的问题。
我插入了验证器表单,如果有错误返回编辑页面的消息,但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工作正常,返回我的身份编辑
答案 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
,而不是代码中的任何位置(只要因为代码中对该路由的每次引用都是通过名称引用它。