2016-01-29 2 views
2

Я пытаюсь экспортировать свою GridView в формате PDF, не повезло :(Это часть моего кода контроллера:Yii2 экспорт GridView в формате PDF с пользовательского шаблона и отфильтрованные данные

class LntTripsController extends Controller 
{ 
    protected $repquery; // my only idea is to pass query parameters via global variable 
    ................. 
    public function actionIndex() 
    { 
     $searchModel = new LntTripsSearch(); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

     $this->repquery = Yii::$app->request->queryParams; // save request here 
     return $this->render('index', [ 
      'searchModel' => $searchModel, 
      'dataProvider' => $dataProvider, 
     ]); 
    } 
............. 
//Here I do export with custom template: 

    public function actionReport() { 

     $searchModel = new LntTripsSearch(); 
     $dataProvider = $searchModel->search($this->repquery); //restore request here 

     $content = $this->render('report', [ 
      'searchModel' => $searchModel, 
      'dataProvider' => $dataProvider, 
     ]); 

     $pdf = Yii::$app->pdf; 
     $mpdf = $pdf->api; 
     $mpdf->WriteHtml($content); 
     return $pdf->render(); 
    } 
} 

Функция actionIndex() работы хорошо, но actionReport() всегда печатает полную таблицу, даже если она была отфильтрованной в actionIndex(). Variable $this->repquery всегда NULL в actionReport().

ответ

1

при вызове actionReport контроллер вновь созданный, а затем вы потеряли queryParams вы сохранили ..

если вы хотите сохранить этот Params не сохранить в контроллере вы можете сохранить значение в

$session = Yii::$app->session; 

увидит этот документ для деталей управления сеансом http://www.yiiframework.com/doc-2.0/yii-web-session.html

http://www.bsourcecode.com/yiiframework2/session-handling-in-yii-framework-2-0/

+0

но LntTripsSearch также недавно создан в actionReport() тот же самый звук потери данных. может быть, есть другой способ передать данные между действиями? –

+0

Вы можете передавать данные между действием, но не таким образом. Вы хотите сохранить запросParam и после его получения. для этого вы можете использовать сеанс .. – scaisEdge

+0

Как вы называете отчет? .. если вы называете отчет, который знаете или можете знать запросParam, вы можете вызвать отчет, передающий это значение. – scaisEdge

0

You не получит значение, используя $this->repquery, потому что $this относится к текущему объекту.
У вас есть два способа, и оба имеют разные объекты:

$searchModel = new LntTripsSearch(); 

Итак, что вы должны сделать, это просто использовать $repquery вместо $this->repquery.

protected $repquery; 

public function actionIndex() 
{ 
    $searchModel = new LntTripsSearch(); 
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

    $repquery = Yii::$app->request->queryParams; 
    return $this->render('index', [ 
     'searchModel' => $searchModel, 
     'dataProvider' => $dataProvider, 
    ]); 
} 

public function actionReport() 
{ 
    $searchModel = new LntTripsSearch(); 
    $dataProvider = $searchModel->search($repquery); 

    $content = $this->render('report', [ 
     'searchModel' => $searchModel, 
     'dataProvider' => $dataProvider, 
    ]); 

    $pdf = Yii::$app->pdf; 
    $mpdf = $pdf->api; 
    $mpdf->WriteHtml($content); 
    return $pdf->render(); 
} 
+0

, тогда я получу «Неопределенная переменная : refquery "исключение –

0

Спасибо за ответы. Сессия - это решение в моем случае.

public function actionIndex() 
{ 
    $searchModel = new LntTripsSearch(); 
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

    $session = Yii::$app->session; 
    // check if a session is already open 
    if (!$session->isActive){ 
     $session->open();// open a session 
    } 
    // save query here 
    $session['repquery'] = Yii::$app->request->queryParams; 

    return $this->render('index', [ 
     'searchModel' => $searchModel, 
     'dataProvider' => $dataProvider, 
    ]); 
} 


public function actionReport() 
{ 

    $searchModel = new LntTripsSearch(); 
    // restore query using session 
    $dataProvider = $searchModel->search(Yii::$app->session->get('repquery')); 

    $content = $this->render('report', [ 
     'searchModel' => $searchModel, 
     'dataProvider' => $dataProvider, 
    ]); 
    // create pdf 
    $pdf = Yii::$app->pdf; 
    $mpdf = $pdf->api; 
    $mpdf->WriteHtml($content); 
    return $pdf->render(); 
} 
+0

это не справедливо .. в неправильном понимании, кто поможет вам и использует эту информацию для предоставления себе (украденного) принятия ответа ... – scaisEdge