我试图用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']);
}
}
如果我从代码中删除分页,它可以正常工作。知道怎么解决吗??
答案 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']);
}