Bonjour,

J'aimerais mettre en place une api REST avec Cakephp, j'ai bien suivi la doc du book de cake à savoir :

1 - Modification Router
Router::mapResources('Apicontroller');
Router::parseExtensions();

2 - Création du controller
<pre>
App::uses('AppController', 'Controller');
class Apicontroller extends AppController {

public $scaffold;
public $components = array('RequestHandler');
public $uses = null; // pas de model, pas de table

 public function beforeFilter(){
  parent::beforeFilter();
  $this->Auth->allow();
}

public function view($id) {
    $this->loadModel('Post');
    $post = $this->Post->findById($id);
    $this->set(array(
        'post' => $post,
        '_serialize' => array('post')
    ));
    //debug($post);
}

</pre>

3 - Appel de l'url

Quand je fais :
http://localhost:8888/Cakephp/apicontroller/view/5
Je récup bien le Post 5 (quand je débug)

Si je fais
http://localhost:8888/Cakephp/apicontroller/5.json

erreur => Fatal error: Cannot access empty property in /Applications/MAMP/htdocs/StoreAdd/lib/Cake/Controller/Controller.php on line 437

et ma 2ème erreur et que je dois obligatoirement me logguer pour appeler les API sinon il me redirige vers /users/login.
Je ne comprend pas pourquoi il fait cette redirection

Merci de vos retours

2 réponses


Lartak
Réponse acceptée

Bonsoir.
Si tu connais les conventions de CakePHP, il ne faut pas faire Apicontroller, mais ApiController.
Ensuite, ce n'est pas Router::mapResources('Apicontroller');, mais Router::mapResources('Api');.
Pour terminer, si tu veux autoriser l'extension json, il te faut l'indiquer dans les extensions autorisées, soit dans ton cas : Router::parseExtensions('json');.

bouks
Auteur

Merci Lartak,
Le problème venait de Router, j'ai mis Apicontroller au lieu de Api ....

thx