2017-01-10 10 views
1

cakephpを使用してApiを作成しようとしています。 私はサーバー上でjsonを生成しても問題なく動作しますが、ページネーションを使用するのは疲れて問題が発生します。最初のケースでCakePhpで改ページ前のデータを変更する

Iは画像のパスを取得し、私は、base64にそれをエンコードし、私は、JSONは=> Iで制限とmaxによってページ付けを定義し、私は同じコードを保つ第二の場合に

を動作生成しますしかし、結果として、画像フィールドは、まだデータベースからのパスで、それは

私のコントローラでは、この私のコードをエンコードされていない:

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

私はそれがうまく動作するコードから改ページを削除した場合。どのようにそれを修正するための任意のアイデア??

答えて

1

を確認してください。

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; 
    }); 
}); 

}

+0

ありがとう!できます –

0

最初にデータを改ページし、配列の値を取得してから、必要に応じてそのデータを変更することができます。私はQuery::formatResults()すなわち、代わりに結果フォーマッタを使用することをお勧めしたい本

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']); 
} 
+2

何[**結果フォーマッタ**](https://book.cakephp.org/3.0/en/orm/query-: は、だから、このようなものを持っていますbuilder.html#adding-calculated-fields)は役に立ちます。 – ndm

+0

私はいつも新しいものからいくつか新しいことを学びます。ありがとう:) –

関連する問題