Я хочу передать переменную в моем приложении 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()); }); }