Yii2 gridview使用自定义模板和筛选数据导出为pdf
我正试图将我的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() { $
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”例外这是不公平的..在不正确的情况下,接受帮助您的人的建议,并使用此信息给自己一个(被盗的)接受答案。。。