我想将我的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
我尝试使用Request但仍然无法使其正常工作。
我想知道如何将视图中的变量传递给服务提供者,或者至少如何从服务提供者调用控制器方法。我尝试过但未能使其正常工作。所有的帮助表示赞赏。
编辑
我从视图
中的$id
变量中获取var
答案 0 :(得分:0)
假设您通过路由传递$ 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}参数。
答案 1 :(得分:-2)
我不知道你从哪里获取id,所以我假设它存储在请求对象的某个地方。话虽如此,您可以在服务提供者的构造函数中键入提示请求对象。然后通过use
关键字将id传递给回调函数。
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());
});
}