【问题标题】:Cakephp 3 - CakePDF and Search Plugin - render filtered data to PDF?Cakephp 3 - CakePDF 和搜索插件 - 将过滤后的数据呈现为 PDF?
【发布时间】:2015-11-22 11:47:40
【问题描述】:

我正在使用 FriendsOfCake CakePDF 插件和 wkhtmltopdf 来将我的视图呈现为 PDF。 我还使用他们的搜索插件通过表单过滤视图数据。

目前,当我在视图中打印数据时,它总是将所有视图数据呈现到 PDF 中,而不仅仅是屏幕上显示的过滤数据。

有没有办法做到这一点?我在插件文档中找不到任何提到这种情况的内容。 PDF插件似乎总是以默认状态重新加载页面,或者从索引函数加载默认查询而不是过滤数据。由于这是我的第一个 CakePDF 项目,我并没有真正得到我必须做的事情来让它呈现过滤后的数据。有人可以帮忙吗?

到目前为止,我的主要文件如下所示:

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;

    }
}
In Template\Paintings\index.ctp

... data in tables ...

<?= $this->Html->link('Save as PDF',[
                         'action' => 'index',
                         '_ext' => 'pdf'],[
                               'class' => 'create-pdf-link', 
                               'target' => 'blank'
                     ]) ?>

然后所有内容都会在 Templates\Paintings\pdf\index.ctp 中呈现,而无需应用过滤。

【问题讨论】:

    标签: php cakephp pdf


    【解决方案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

    【讨论】:

    • 太棒了!完全忘记了参数facepalm。但老实说,即使在阅读了这本书之后,我也不会考虑这样做......我猜想缺少一些 php 基础知识......但我正在努力;)。非常感谢您的帮助!
    【解决方案2】:

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

    );

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      相关资源
      最近更新 更多