2016-01-29 4 views
2

Je suis en train d'exporter mon gridview en pdf sans chance :(C'est une partie de mon code de commande:Yii2 gridview export au format PDF avec le modèle personnalisé et des données filtrées

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

La fonction actionIndex() travaux bien, mais actionReport() toujours imprime le tableau complet, même quand il a été filtré actionIndex(). variable $this->repquery toujours NULL dans actionReport().

Répondre

1

lorsque vous appelez actionReport le contrôleur est nouvellement créé et vous avez perdu les queryParams .. vous avez enregistré

si vous voulez enregistrer cette params ne pas enregistré dans un contrôleur vous pouvez stocker la valeur dans

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

voir ce document pour les détails de la gestion de la 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

mais LntTripsSearch est également nouvellement créé dans actionReport() même perte de données entendre. peut-être il existe un autre moyen de transmettre des données entre les actions? –

+0

Vous pouvez passer des données entre les actions mais pas de cette façon .. vous voulez stocker le queryParam et après retomber cette valeur.,. pour cela vous pouvez utiliser la session .. – scaisEdge

+0

Comment appelez-vous le rapport? .. si vous appelez le rapport que vous connaissez ou pouvez connaître le queryParam, vous pouvez appeler le rapport en passant cette valeur .. – scaisEdge

0

Vous n'obtiendra pas de valeur en utilisant $this->repquery parce que $this fait référence à l'objet actuel.
Vous avez deux méthodes et les deux ont différents objets:

$searchModel = new LntTripsSearch(); 

Alors, ce que vous devez faire est d'utiliser simplement $repquery au lieu de $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

alors j'obtiendrai "Variable indéfinie : repquery "exception –

0

Merci pour les réponses. La session est la solution dans mon cas.

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

ce n'est pas juste .. pas juste prendre la suggestion de qui vous aider et utiliser cette information pour vous donner une réponse (volée) accepter ... – scaisEdge