将变量传递给laravel服务提供者

时间:2015-07-07 18:53:02

标签: php laravel laravel-5

我想将我的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

2 个答案:

答案 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());
    });
}