2015-07-07 5 views
4

В моем приложении laravel я передаю переменную $ data в представление, которое позже я буду включать в другое представление. Так что в моем методе контроллера у меня естьданные во включенных представлениях в laravel

public function random($id){ 
    $data = DB::table('reports')->where('id',$id); 
    return view('partials.data', compact('data')); 
} 

в partials.data у меня есть:

{!! Form::open(['url'=>'reports/data',$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() !!} 

и на главном экране у меня есть эта функция:

function kpi_values(d) { 
    // `d` is the original data object for the row 
    kpi = d.id; 
    return '@include("reports.data", array("id" => "kpi"))'; 
} 

, срабатывающий:

$('#monthly_table tbody').on('click', 'td.details-controls', function() { 
     var tr = $(this).closest('tr'); 
     var row = table.row(tr); 
     if (row.child.isShown()) { 
      // This row is already open - close it 
      row.child.hide(); 
      tr.removeClass('shown'); 
     } 
     else { 
      row.child(kpi_values(row.data())).show(); 
      tr.addClass('shown'); 


     } 
    }); 

, когда я запускаю это я получаю следующее сообщение об ошибке:

ErrorException in 3534c4c98c65c2d5267bf7c54a960d41 line 13: 
Undefined variable: data 

Я прошел переменные данные в моей частичной точки зрения, однако, кажется, что это требует в первичном виде. Есть ли способ сделать это, не передавая переменную в основной вид? Я не хочу смешивать вещи, потому что для метода контроллера частичного представления требуется параметр, в то время как в основном представлении нет параметров.

Все помощь ценится

ответ

2

Laravel предлагает отличный инструмент для обработки этой ситуации, в которой мы должны передать некоторые параметры частичного виду без прохождения через основную точку зрения. Это композитор представления. Вот пример:

In \App\Providers\AppServiceProvider.php file 

public function boot() 
{ 

    //get data and pass it to partials.data whenever partials.data is executed 

view()->composer('partials.data',function($view){ 
    $view->with('data',DataSet::all()); 
}); 

} 

Для более продвинутых, вы можете узнать его из Laracast

+0

у меня есть еще один вопрос. что если вместо 'DataSet :: all()' i было что-то вроде 'DB :: table ('reports') -> где ('id', $ id)', как мне передать параметр $ id поставщик услуг? – xhulio

+0

Это немного длинный ответ. Вы должны создать новый сегмент вопросов. Я отвечу вам за вас. Дайте мне ссылку, когда вы ее создадите. –

+0

http://stackoverflow.com/questions/31277017/passing-variables-to-laravel-service-provider/31278085#31278085 вот вопрос – xhulio

0

Вы можете использовать общие методы для передачи данных для всех представлений.

return view('partials.data')->share('data', $data); 
Смежные вопросы