2016-10-28 2 views
0

Voici mon ClientsController:Comment ajouter à la pagination requête personnalisée dans CakePHP3

namespace App\Controller\Api; 

use App\Controller\Api\AppController; 

class ClientsController extends AppController{ 
    public $paginate = [ 
    'page' => 1, 
    'limit' => 5, 
    'maxLimit' => 15, 
    'fields' => [ 
     'id', 'name', 'user_id', 'dob', 'phone', 'email' 
    ], 
    'sortWhitelist' => [ 
     'id', 'name', 'user_id', 'dob', 'phone', 'email' 
    ] 
]; 




public function index(){ 
    $clients = $this->Clients->find('clients'); 
    $this->set([ 
       'clients'=>$clients, 
       '_serialize'=>['clients'] 
       ]); 

    } 

} 

Voici mon habitude Finder (ClientsTable):

public function findClients(Query $query, array $options){ 
    $query 
      ->select([ 
       'clients.id', 
       'clients.name' 
      ]) 
      ->where(['clients.user_id =' => 3]); 
    return $query; 
} 

Comment puis-je ajouter à cette pagination? Tout cela fonctionne très bien, il manque juste la pagination.

Si je supprime la fonction d'index, j'obtiens une pagination mais mon finder ne semble pas être appelé. Voici comment ce code semble:

namespace App\Controller\Api; 

use App\Controller\Api\AppController; 

class ClientsController extends AppController{ 
    public $paginate = [ 
    'page' => 1, 
    'limit' => 5, 
    'finder' => 'clients', 
    'maxLimit' => 15, 
    'fields' => [ 
    'id', 'name', 'user_id', 'dob', 'phone', 'email' 
    ], 
    'sortWhitelist' => [ 
    'id', 'name', 'user_id', 'dob', 'phone', 'email' 
    ] 
]; 
} 
+0

Jusqu'à présent, la seule façon de faire fonctionner ce composant est d'utiliser ce composant: https://github.com/bcrowe/cakephp-api-pagination – bstras21

+0

Copie possible de [Ajout de la valeur de pagination à la réponse json dans Cakephp 3.3] (http://stackoverflow.com/questions/40225505/adding-pagination-value-to-json-response-in-cakephp-3-3) – ndm

+0

Ce n'est pas un doublon, le mien essaie d'utiliser un chercheur personnalisé. – bstras21

Répondre

0

Je n'ai pas d'expérience avec l'aide de l'option « Recherche » sur le tableau de pagination, mais vous devriez être en mesure de passer simplement votre requête à la fonction paginate, le long de ces lignes :

$clients = $this->paginate($this->Clients->find('clients')); 
+0

Merci d'avoir répondu, j'ai essayé mais juste obtenir cela comme une réponse: { "clients": [ { "id": 1, "name": "Test client 1", "user_id": 3, "dob": "18/12/1977", "téléphone": "715-572-5211", "email": "[email protected]", "clients": { "id": "1", "nom": "Client test 1" } } ] } – bstras21

0

Vous pouvez essayer le code ci-dessous

$this->loadComponent('Paginator'); /*Load the Paginator component*/ 
$clients = $this->Paginator->paginate($this->Clients->findClients()); /*Pass your finder method to the Paginator*/ 

Voici la documentation pour l'utilisation directement de Paginator composants Using the Paginator Directly

+0

Cela ne fonctionne pas non plus. J'obtiens le résultat json mais il n'y a pas de propriété paginate avec. – bstras21

+0

@ bstras21 C'est un problème totalement différent que vous n'avez pas mentionné dans votre question! – ndm