Bonsoir,

Je me retrouve face a un probleme pour get les informations en JSON sous Cakephp2

Voici ma methode dans le controller Product:

    public function getPathOfProduct($id){
        $this->loadModel('Category');
        $results = array($this->Category->getPath($id));
         echo json_encode($results);
    }

Je l'appelle depuis ma View Product de cette facon:

 $idCategory = $product['Product']['category_id'];
    $this->requestAction(['controller' => 'products', 'action' => 'getPathOfProduct',$idCategory]);

Le probleme c'est que je recoit bien le contneu du fichier JSON dans ma view mais impossible de le traiter comme je souhaite je le recoit directement comme ceci:

[[{"Category":{"id":"25","parent_id":"0","lft":"39","rght":"48","name”:”test1”,”slug”:”test1”}},{“Category":{"id":"26","parent_id":"25","lft":"40","rght":"47","name”:”test2”,”slug”:”test2”}},{“Category":{"id":"8","parent_id":"26","lft":"45","rght":"46","name”:”test3”,”slug”:”test3”}}]] 

Le but c'est que je puisse recuperer par exemple chaque "name"
et id afin de l'aficher sous forme de liste HTML.

je vous remercie pour votre aide.

1 réponse


Il faut que tu active l'extension json dans ton fichier routes.php :

Router::parseExtensions(['json]);

ensuites tu charges le requestHandler dans ton controller :

public $components = array('RequestHandler');

Puis dans ta méthode

public function monAction()
{
    $results = ta requête
    $this->set('results', $results);
    $this->set('_serialize', ['results']);
}

et finalement dans ta vue /Views/Categories/json/monAction.ctp

<?php echo json_encode(compact('results')); ?>