Bonjour,
J'aimerai que quelqu'un mexplqiue comment côté serveur (cakephp) rendre correctement une réponse ajax
Ce que je fais
J'ai essayé 2 choses :
1 - Dans mon AppController
public function initialize()
{
parent::initialize();
$this->Auth->deny();
$this->loadComponent('RequestHandler');
if ($this->request->is('ajax')) {
$this->RequestHandler->renderAs($this, 'json');
}
}
Dans l'action du controller
$this->set(compact('data'));
$this->set('_serialize', ['data']);
2 - Dans mon AppController
public function initialize()
{
parent::initialize();
$this->Auth->deny();
$this->loadComponent('RequestHandler');
if ($this->request->is('ajax')) {
$this->viewBuilder()->layout('ajax');
}
}
Le code de l'action du controller de change pas.
Et dans le template XXX.ctp associé à mon action XXX du controlleur contient :
<?= json_encode(compact('data')); ?>
Les 2 codes précédents marchent seulement voilà :
1 - dans le premier cas, j'ai l'impression que la classe AjaxView et le layout ajax ne servent à rien et il n'y a pas de template associé à l'action comme dans le code 2 (ce qui ne me dérange pas vu qu'il y a 1 ligne "bidon" à chauqe fois dedans)
2 - dans le deuxième cas, ce qui me dérange c'est justement l'avantage du premier cas : je suis obliger de créer pour chaque action retournant de l'ajax un template contenant 1 ligne "bidon".
Ce que je veux
Alors après tout ça vous me diriez : mais quel est ton problème !???
Eh bien c'est j'ai 2 solutions pour rendre une vue format json pour de l'ajax et que je pense qu'aucune des 2 n'est la bonne ...
J'aimerai que quelqu'un me dise simplement quel est la bonne manière dans Cakephp 3pour rendre du json pour une réponse ajax : code de l'action et/ou initialisation de son AppController.
Y a til une configuration ou quelque chose autre que le loadComponent('RequestHandler'); à faire ?
Enfin, j'aimerai quel est la bonne manière pour rendre une erreur/exception (400, 500) pour que mon appel ajax le détecte.