【问题标题】:Laravel 5.2 Returning View from a controllerLaravel 5.2 从控制器返回视图
【发布时间】: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]);

标签: controller routing laravel-5.2


【解决方案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/editf‌​ront}}"> 我现在在 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});
    

    如果你能显示整个错误信息或路由文件会非常有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2016-10-26
      • 2016-11-18
      • 2021-03-02
      • 1970-01-01
      相关资源
      最近更新 更多