在多个视图上传递变量

时间:2018-03-27 08:00:14

标签: laravel laravel-5

我需要在多个视图上传递一个变量,以便在多个视图上执行UPDATE(editScadenza和elaborazioneScadenza)。 或者你知道另一个更简单的解决方案吗?

ScadenzaController.php

public function edit($id)
{
    $data['scadenzaRecuperata'] = \App\Scadenza::find($id);

    return view('scadenze.editScadenza', $data);
}

更新

    public function update(Request $request, $id)
{

    $this->validate($request,[
        'titolo'=>'required',
        'termine_stimato'=>'required',
        'responsabile'=>'required',
        'tipologia_id'=>'required',
        'giorni_avviso'=>'required',
    ],
    [
        'titolo.required'=>'Il titolo é obbligatorio',
        'termine_stimato.required' => 'Il termine stimato é obbligatoria',
        'responsabile.required' => 'Il responsabile é obbligatorio',
        'tipologia_id.required' => 'Il tipo é obbligatorio',
        'giorni_avviso.required'=> 'I giorni di avviso sono obbligatori',
    ]);

    $scadenza = \App\Scadenza::find($id);

    $now = Carbon::now();
    $end = Carbon::parse($scadenza->termine_stimato);
    $length = $end->diffInDays($now);

    $scadenza->titolo = $request->input('titolo');
    $scadenza->termine_stimato = date_create($request->input('termine_stimato'))->format('Y-m-d H:i');
    $scadenza->responsabile = $request->input('responsabile');
    $scadenza->tipologia_id = $request->input('tipologia_id');
    $scadenza->processo_id = $request->input('processo_id');
    $scadenza->stato = $request->input('stato');
    $scadenza->giorni_avviso = $request->input('giorni_avviso');
    $scadenza->osservazioni  = $request->input('osservazioni');

    $scadenza->save();

    return redirect('scadenza');

}

2 个答案:

答案 0 :(得分:1)

建议的最佳解决方案是从控制器功能共享变量。如果您只需要2,3个视图,并且所有视图都在同一个控制器下,那么就像往常一样分享它:

public function function_nameX($id)
{
  ..
  return view('scadenze.viewNameX')->withData($data);
}

...

public function function_nameY()
{
  ..
  return view('scadenze.viewNameY')->withData($data);
}

即使您有多个控制器返回的视图也要这样做。因为这是最方便的方式。

要与项目中的所有视图共享变量,请从AppServiceProvider的boot()函数中共享它,如:

public function boot()
{
  $data['scadenzaRecuperata'] = \App\Scadenza::find($id);
  View::share('data', $data);
}
  

View Composer还有助于将特定数据绑定到不同的视图中   方法。您可以直接将变量绑定到特定视图或所有视图。   例如,您可以创建自己的目录来存储视图   作曲家文件根据要求。和这些视图作曲家文件   通过服务提供与视图的互动。

这是doc

答案 1 :(得分:1)

要与视图共享数据,您可以设置视图Composer

app / Providers / AppServiceProvider.php 中加载到boot()方法

public function boot() {

  view()->composer('scadenze.editScadenza', function($view) {

    $data = \App\Scadenza::find(request()->id);

    $view->with('data', $data);
  });

}

有关更多日期,请参阅Laravel View Composers

  • 如果您只需要与一个共享:composer('VIEW_NAME', ...)
  • 如果您需要与多个人共享数据:composer(['VIEW_NAME_1', 'VIEW_NAME_2'], ...)
  • 如果您需要与所有观看次要分享:composer('*', ...)