Cakephp 3 - CakePDF和搜索插件 - 将过滤后的数据渲染为PDF?

时间:2015-11-22 11:47:40

标签: php cakephp pdf

我正在使用带有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中呈现,而不进行应用过滤。

2 个答案:

答案 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'
    ]
);

另请参阅 Cookbook > Routing > Generating URLs

答案 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'
]

);