Bonjour,<br>
je voudrais savoir comment metter le resultat d'un find sous format json et qu'il soit afficher au bon format
pasque j'utilise un grid de Kendo UI et c'est la galère depuis une semaine <br>
Voici le code de mon controller:

$data = $this->Patient->find('all');
$this->set(array(
            'data' => $data,
            '_serialize' => array('data'),
            '_jsonp' => true));

Résultat de l'affichage en json:<br>

{
    "data": [
        {
            "Patient": {
                "reference": "P-001",
                "nom": "Moalla",
                "prenom": "Mehdi",
                "birthdate": "1989-10-15",
                "sexe": "m",
                "nationalite": "",
                "job": "",
                "adresse": "",
                "ville": "",
                "tel": "",
                "email": "",
                "note": "",
                "age": "",
                "numss": "",
                "id": "548dd08bec88a94c1f000029"
            }
        }
    ]
}

voici le code du grid kendo :

  <div id="grid"></div>
<script>
            jQuery().ready(function () {
                var productsDataSource = new kendo.data.DataSource({
                    type: "json",
                    transport: {
                        read: {
                            url: "http://localhost/DCI/patients.json",
                        },
                        update: {
                            url: "http://localhost/DCI/patients/edit/"
                        },
                        create: {
                            url: "http://localhost/DCI/patients/add.json"
                        },
                        destroy: {
                            url: "http://localhost/DCI/patients/delete/"
                        },
                        parameterMap: function (options, operation) {
                            if (operation !== "read" && options.models) {
                                return {models: kendo.stringify(options.models)};
                            }
                        }
                    },
                    batch: true,
                    pageSize: 20,
                    schema: {
                        model: {
                            id: "id",
                            fields: {
                                id: {editable: false, nullable: true, type: "string" },
                                reference: {type: "string", validation: {required: true}},
                                nom: {type: "string", validation: {required: true}},
                                prenom: {type: "string", validation: {required: true}},
                                sexe: {type: "string", validation: {required: true}}
                            }
                        }
                    }
                });

                productsDataSource.read();

                $("#grid").kendoGrid({
                    dataSource: productsDataSource,
                    pageable: true,
                    height: 300,
                    selectable: true,
                    toolbar: ["create"],
                    columns: [
                        {
                            field: "reference",
                            title: "Réf."
                        },
                        {
                            field: "nom",
                            title: "Nom"
                        },
                        {
                            field: "prenom",
                            title: "Prénom"
                        },
                        {
                            field: "sexe",
                            title: "Sexe"
                        },
                        {
                            command: ["edit", "destroy"], title: "Actions", width: "250px"
                        }
                    ],
                    editable: "inline"
                });
            });
        </script>

Le résultat dans le navigateur :

Si quelqu'un peut m'aider c'est pour mon projet de fin d'étude et merci.

7 réponses


Azorgh
Réponse acceptée

Bonjour,

Dans ton cas, il s'agit aujourd'hui d'un soucis de formatage des données pour que kendo reussise à gérer la data je me trompe ?
Si la requete part correctement, et que tu as une réponse, la partie Cake réponse en jSon est bonne.

Il faut maintenant soit paramétrer kendo pour lire le format Cake (chiant je pense), soit le formater avec Cake avant la sortie pour correspondre à ce que kendo attend.

La dessus je pourrais pas t'aider , je connais pas kendo.

Si tu souhaite pouvoir modifier le format sortie par CakePHP, il te faut passer par une vue json:

// app/Controller/PatientsController.php
public function index() {
    $patients = $this->Patient->find('all');
    $this->set(compact('patients'));
}

// app/View/Patients/json/index.ctp
foreach($patients as $patient){
    // traitement de la variable...
}
echo json_encode($patients);

mon code se trouve dans une vue index.ctp du controller et celui du json j'affiche seulement la variable passé à la vue
est ce que je dois ecrire tout sur la vue index du dossier json ??

Non, en fait la vue dans le dossier json va juste te permettre de traiter la sortie jSON par exemple:

// app/Controller/UsersController.php
public function index(){
    $users = $this->User->find('all');
    $this->set(compact('users'));
}

On récupère le tableau dans la vue afin de traiter le tableau pour retirer le mot de passe pour chaque utilisateur car on ne souhaite pas l'afficher:

// app/View/Users/json/index.ctp
$output = array();
foreach ($users as $user) {
    unset($user['User']['password']);
    array_push($output, $user['User']);
}
echo json_encode($output);

Je ne sais pas si ça répond à ta question, je l'ai peut-être mal compris.

nn le grid lit le json mais n'affiche pas de données merci comme même

Salut,
quelque question surement débile mais que je dois poser avant.
As tu lu http://book.cakephp.org/2.0/en/development/rest.html

Si oui pourquoi tu a ajouté un

"_jsonp" = true

dans ton set

et la page http://localhost/DCI/patients.json elle t'affiche quoi ?

J'ai lu toute la doc de cake a propos de rest et j'ai ajouter le jsonp pasque le grid kendo ui travaille avec jsonp et le resultat de patient.json est : <br>

{
    "data": [
        {
            "Patient": {
                "reference": "P-001",
                "nom": "Moalla",
                "prenom": "Mehdi",
                "birthdate": "1989-10-15",
                "sexe": "m",
                "nationalite": "",
                "job": "",
                "adresse": "",
                "ville": "",
                "tel": "",
                "email": "",
                "note": "",
                "age": "",
                "numss": "",
                "id": "548dd08bec88a94c1f000029"
            }
        }
    ]
}