传递变量到laravel服务提供商(passing variables to laravel ser

2019-10-23 16:24发布

我想从着眼于服务提供商对我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

我请求尝试过,但还是没能使其工作。

我想知道如何将变量从视图传递给服务提供商,或者至少如何调用从服务提供商的控制方法。 我尝试过,但未能使其发挥作用。 所有帮助表示赞赏。

编辑

我得到$idvar变量视图

Answer 1:

假设你传递的$ 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}参数。



Answer 2:

我不知道你在哪里,所以我假设它是介于存储在请求对象中获取的ID。 随着中说,你可以输入,暗示在服务提供商的构造函数的请求对象。 然后,通过将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());
    });
}


文章来源: passing variables to laravel service provider