Laravel 5.2 从控制器返回视图
Posted
技术标签:
【中文标题】Laravel 5.2 从控制器返回视图【英文标题】:Laravel 5.2 Returning View from a controller 【发布时间】:2016-08-14 10:12:40 【问题描述】:我在子目录“admin”中定义了一个视图,它是一个编辑表单。提交后,它会使用以下代码传递给控制器:
class ThisSiteController extends Controller
public function updateSite(Request $request)
$thissite = DB::table('this_site')->where('id',1)->get();
$thissite->headline = $request->headline;
$thissite->save();
return view('admin.editfront')->with('site', $thissite);
;
它正在更新一个标题,但我总是得到
NotFoundHttpException in RouteCollection.php line 161:
虽然调用编辑的路由是(并且工作正常):
Route::get('/admin/editfront', function()
$thissite = DB::table('this_site')->where('id',1)->get();
return view('admin.editfront')->with('site', $thissite);
);
【问题讨论】:
是的。数据库更新正常。是调用视图的行给出了错误。 不 - 我只是从表单中调用控制器方法。 @Jim 你什么时候收到这个错误?提交表单之后还是之前? 像这样返回视图 ... return view('admin.editfront' , ['site' => $thissite]); 【参考方案1】:如果您要提交表单,请确保路由使用的是 post。
Route::post('/admin/editfront', 'ThisSiteController@updateSite');
如果这不是问题,您能否显示您的表单代码和更新路径?
编辑
class ThisSiteController extends Controller
public function updateSite(Request $request)
DB::table('this_site')
->where('id',1)
->update(['headline' => $request->input('headline')]);
$thissite = DB::table('this_site')->where('id',1)->first();
return view('admin.editfront')->with('site', $site);
;
【讨论】:
我已将表单更改为 抱歉错字。 Fiorm 现在是表单 id="form1" method="post" action="/admin/editfront"> 我现在在 ThisSiteController.php 第 16 行收到“ErrorException:尝试获取非对象的属性” " 当引用 $thissite->headline = $request->headline;. 那是因为get()
返回一个结果数组。使用find(1)
或$thissite[0]->headline
做到了。现在我在 ThisSiteController.php 第 18 行有 FatalErrorException:调用数组上的成员函数 save()
再一次,$thissite
是一个数组,$thissite[0]->save()
如果您想保存该模型,但最好使用first()
或find()
方法【参考方案2】:
我建议您也将编辑操作移至控制器方法,以下对 updateSite 方法的更改将解决更新问题。如果你使用了模型会简单得多。
class ThisSiteController extends Controller
public function updateSite(Request $request)
$thissite = DB::table('this_site')->where('id',1)->update(['headline' => $request->get('headline')]);
return view('admin.editfront',['site' => $thissite]);
public function editSite()
$thissite = DB::table('this_site')->where('id',1)->first();
return view('admin.editfront',['site' => $thissite]);
还将editfront路由路由到ThisSiteController@editSite
方法。
对于表单操作,您可以使用action=" action('ThisSiteController@editSite') "
【讨论】:
【参考方案3】:您在路由中使用 get 请求,这可能会导致问题。
如果您在表单中使用 POST 方法,请将您的路线更改为:
Route::post('/admin/editfront',ThisSiteController@updateSite);
如果你能显示整个错误信息或路由文件会非常有用。
【讨论】:
以上是关于Laravel 5.2 从控制器返回视图的主要内容,如果未能解决你的问题,请参考以下文章
如何从 laravel 5.2 中的网站提取 API? [关闭]