передача переменных поставщику услуг laravel

Я хочу передать переменную в моем приложении laravel из представления поставщику услуг. Представление:

{!! Form::open(['url'=>'reports/data',$kpi_id]) !!} <table class="table table-responsive table-condensed table-bordered tab-content"> <thead> <tr> <th>Month</th> <th>Value</th> </tr> </thead> <tbody> @foreach($data as $dat) <tr>{{$dat->month}}</tr> <tr>{{$dat->value}}</tr> @endforeach </tbody> </table> {!! Form::close() !!} 

и код у поставщика услуг:

 public function boot() { $this->composeData(); } /** * Register the application services. * * @return void */ public function register() { // } public function composeData() { view()->composer('reports.data', function ($view, $id) { $view->with('data', DB::table('reports')->where('kpi_id', $id)->orderBy('month', 'desc')->take(5)->get()); }); } 

Ошибка:

 Argument 2 passed to App\Providers\DataServiceProvider::App\Providers\{closure}() must be an instance of App\Http\Requests\Request, none given 

Я попробовал его с помощью запроса, но все равно не смог заставить его работать.

Я хочу знать, как передать переменную из представления поставщику услуг или, по крайней мере, как вызвать метод контроллера у поставщика услуг. Я попробовал, но не смог заставить его работать. Вся помощь приветствуется.

РЕДАКТИРОВАТЬ

Я получаю $id от переменной var в представлении

Предполагая, что вы передаете $ id через маршрут, используя класс Router который очень полезен в этом случае. Например :

 use Illuminate\Routing\Router; // include in your ServiceProvider public function boot(Router $router) { $router->bind('id',function($id){ // route: /reports/{id} $this->composeData($id); }); } public function composeData($id) { $result = DB::table('reports')->where('kpi_id', $id)->orderBy('month', 'desc')->take(5)->get() view()->composer('reports.data', function ($view) use ($result) { $view->with('data', $result); }); } 

Но будьте осторожны, теперь ваше мнение зависит от параметра {id}.

Я не знаю, откуда вы получаете идентификатор, поэтому я предполагаю, что он хранится где-то в объекте запроса. С учетом сказанного вы можете набрать запрос объекта запроса в конструкторе поставщика услуг. Затем передайте идентификатор в функцию обратного вызова с помощью ключевого слова use .

 public function __construct($app, \Request $request) { parent::__construct($app); $this->request = $request; } public function boot() { $this->composeData(); } /** * Register the application services. * * @return void */ public function register() { // } public function composeData() { $id = $this->request->get('your_id'); view()->composer('reports.data', function ($view) use($id) { $view->with('data', \DB::table('reports')->where('kpi_id', $id)->orderBy('month', 'desc')->take(5)->get()); }); }