在CakePhp中分页之前修改数据

时间:2017-01-10 08:02:46

标签: php json cakephp pagination

我试图用cakephp创建一个Api。 我在服务器上生成一个json并且它工作正常,但我厌倦了使用分页,我遇到了问题。

在第一种情况下我拍摄图像的路径并将其编码为base64并生成json =>作品

在第二种情况下,我通过限制和最大值来定义分页,并且我保持相同的代码,但结果是图像字段仍然是来自数据库的路径,并且它没有被编码

这是我控制器中的代码:

class PilotsController extends AppController {
    public $paginate = [
        'page' => 1,
        'limit' => 5,
        'maxLimit' => 5
    ];

    public function initialize() {
        parent::initialize();
        $this->loadComponent('Paginator');
        $this->Auth->allow(['add','edit','delete','view','count']);
    }

    public function view($id) {
        $pilot = $this->Pilots->find()->where(['Pilots.account_id' => $id], [
            'contain' => ['Accounts', 'Pilotlogs']
        ]);
        foreach ($pilot as $obj) {
            if ($obj->image_pilot!= NULL) {
                $image1 = file_get_contents(WWW_ROOT.$obj->image_pilot);
                $obj->image_pilot = base64_encode($image1);
            }
        }
        $this->set('pilot', $this->paginate($pilot));
        $this->set('_serialize', ['pilot']);
    }
}

如果我从代码中删除分页,它可以正常工作。知道怎么解决吗??

2 个答案:

答案 0 :(得分:1)

我建议改为使用结果格式化程序,即Query::formatResults()。 所以你会有这样的事情:

public function view($id) {
$pilot = $this->Pilots->find()
->where(['Pilots.account_id' => $id], [
    'contain' => ['Accounts', 'Pilotlogs']]);
->formatResults(function($results) {
    return $results->map(function($row) {
        $image1 = file_get_contents(WWW_ROOT.$row['image_pilot']);
        $row['image_pilot'] = base64_encode($image1);
        return $row;
    });
});

}

答案 1 :(得分:0)

您可以先简单地对数据进行分页,然后获取数组值,然后根据需要修改数据。检查一下

public function view($id) {
    $pilot = $this->Pilots->find()->where(['Pilots.account_id' => $id], [
        'contain' => ['Accounts', 'Pilotlogs']
    ]);
    $pilot = $this->paginate($pilot);
    $pilot = $pilot->toArray();
    foreach ($pilot as $obj) {
        if ($obj->image_pilot!= NULL) {
            $image1 = file_get_contents(WWW_ROOT.$obj->image_pilot);
            $obj->image_pilot = base64_encode($image1);
        }
    }
    $this->set('pilot', $pilot);
    $this->set('_serialize', ['pilot']);
}