我正在使用带有wkhtmltopdf的FriendsOfCake CakePDF插件将我的视图呈现为PDF。 我还使用他们的搜索插件来过滤表单中的视图数据。
现在,当我在视图中打印数据时,它总是将所有视图数据呈现到PDF中,而不仅仅是屏幕上显示的过滤数据。
有没有办法做到这一点?我在Plugin Docs中找不到任何提到这种情况的内容。似乎PDF插件总是以默认状态重新加载页面,或者更确切地说是从索引函数加载默认查询而不是过滤数据。由于这是我的第一个CakePDF项目,所以我并没有真正得到我必须做的事情来使它渲染过滤后的数据。任何人都可以帮忙吗?
以下是我的主要文件到目前为止的样子:
Console.WriteLine("Please enter the code you wish to dial.");
int[] code = GetPhoneNumber(); // if you want default length
class PaintingsController extends AppController
{
public function index()
{
$query = $this->Paintings
->find('search',
$this->Paintings->filterParams($this->request->query))
->contain(['Artists',
'Tickets' => function ($q) {
return $q->where(['Tickets.active' => false]);
}
]);
$this->viewBuilder()->options([
'pdfConfig' => [
'orientation' => 'portrait',
'filename' => 'paintings.pdf'
]
]);
$this->set('paintings', $this->paginate($query));
$this->set('_serialize', ['paintings']);
}
}
class PaintingsTable extends Table
{
public function searchConfiguration()
{
$search = new Manager($this);
$search->like('title', [
'before' => true,
'after' => true,
'field' => $this->aliasField('title'),
'filterEmpty' => true
])->value('property', [
'field' => $this->aliasField('property'),
'filterEmpty' => true
])->like('artist_name', [
'before' => false,
'after' => true,
'field' => $this->Artists->target()->aliasField('surname'),
'filterEmpty' => true
])->value('technique', [
'field' => $this->aliasField('technique'),
'filterEmpty' => true
]);
return $search;
}
}
然后,所有内容都在Templates \ Paintings \ pdf \ index.ctp中呈现,而不进行应用过滤。
答案 0 :(得分:1)
您的PDF链接不包含任何过滤器参数,因此没有重新加载或任何内容,它只是不会进行任何过滤。
当生成链接/ URL时,当前查询没有被自动包含,您必须自己将它显式传递给URL数组,例如
$this->Html->link(
'Save as PDF',
[
'action' => 'index',
'_ext' => 'pdf'
] + $this->request->query, // there it goes
[
'class' => 'create-pdf-link',
'target' => 'blank'
]
);
答案 1 :(得分:0)
FIY,在CakePHP 2中,情况有所不同,您将使用
$this->request->params['named']
代替
$this->request->query
喜欢
$this->Html->link(
'Save as PDF',
[
'action' => 'index',
'_ext' => 'pdf'
] + $this->request->params['named'],
[
'class' => 'create-pdf-link',
'target' => 'blank'
]
);