【问题标题】:Laravel Route ParameterLaravel 路由参数
【发布时间】:2021-02-04 00:26:07
【问题描述】:

我想浏览数据库中的页面。所以我试图在路由页面中使用参数。

路线就是这样。

$page = Pages::get();
 foreach($page as $key){
   $id= $key->id;
 Route::get($key->pages_name,'ThemeRestorantController@pages($id)');
}

pages 方法是 ThemeRestorantController 中的方法

public function pages($id)
{
   dd($id);
}

我正在采取跟随错误。 Controller.php 第 283 行中的 BadMethodCallException:方法 [pages($id)] 不存在。

【问题讨论】:

    标签: laravel methods routes controller content-management-system


    【解决方案1】:

    首先欢迎来到 SO :)

    您不能在方法控制器中的() 内发送参数,您应该在 URL 中发送参数,如下所示:

    Route::get($key->pages_name . '/{id}','ThemeRestorantController@pages');
    

    【讨论】:

      【解决方案2】:

      您的路线定义错误。您必须在 url 部分中传递参数,而不是在控制器方法中。

      Route::get($key->pages_name/{id}, 'ThemeRestorantController@pages');
      

      而且你不需要循环来制作你的路线。您可以简单地将 slug 与 id 一起用作参数

      Route::get('{id}/{pages_name}', 'ThemeRestorantController@pages')->name('page-route');
      //it's better to use a named route
      

      然后你可以像控制器一样使用它

      public function pages($id, $pages_name)
      {
          $page = Pages::find($id);
          return view('view_file', compact('page'));
      }
      

      并从类似的视图调用页面

      <a href="{{ route('page-route', [$page->id, $page->page_name]) }}">My Page</a>
      

      【讨论】:

        【解决方案3】:

        根据您的代码,这不是在 web.php 上循环的正确方法,因此更好的方法是全部捕获并在控制器中处理

        web.php

        Route::get('{pages_name}','ThemeRestorantController@pages');
        

        ThemeRestorantController.php

        public function pages($pages_name)
        {
            $page = Pages::where('page_name',$pages_name)->firstOrFail();
            return view($pages_name,compact('page'));
        }
        

        这样pages_name 视图加载和$page 数据将发送到该视图

        【讨论】:

          猜你喜欢
          • 2016-03-05
          • 2018-04-05
          • 2013-11-24
          • 2017-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-10
          • 2021-10-01
          相关资源
          最近更新 更多