Yii2 gridview使用自定义模板和筛选数据导出为pdf

Yii2 gridview使用自定义模板和筛选数据导出为pdf,gridview,yii2,export-to-pdf,Gridview,Yii2,Export To Pdf,我正试图将我的gridview导出为pdf,但运气不佳:(。这是我控制器代码的一部分: class LntTripsController extends Controller { protected $repquery; // my only idea is to pass query parameters via global variable ................. public function actionIndex() { $

我正试图将我的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()
中对其进行了筛选。变量
$this->repquery
总是
NULL
actionReport()中

调用actionReport时,控制器是新创建的,然后您丢失了保存的查询参数

如果要保存此参数,请不要保存在控制器中 您可以将值存储在

$session = Yii::$app->session;
有关会话管理的详细信息,请参见本文档


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

谢谢你的回答。会话是我的解决方案

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

但LntTripsSearch也是在actionReport()中新创建的相同的数据丢失。可能有其他方法在操作之间传递数据吗?您可以在操作之间传递数据,但不能以这种方式。您希望存储queryParam并在检索此值之后。,。为此,您可以使用会话。。如何调用报告?。如果您在哪里调用报告,您知道或可以知道queryParam,则可以调用report传递此值..然后我将得到“Undefined variable:repquery”例外这是不公平的..在不正确的情况下,接受帮助您的人的建议,并使用此信息给自己一个(被盗的)接受答案。。。