Formation CakePHP 1 3 8 Exercices

download Formation CakePHP 1 3 8 Exercices

of 13

Transcript of Formation CakePHP 1 3 8 Exercices

Tutoriel CakePHP

Crez rapidement vos applications avec CakePHP

Auteur

Date de dernire version 18/04/11

Numro de version 1.2

Christian Buffin Formation CakePHP 1.3.8

Page 1 / 13

Rvisions SQL1.Trouver tous les posts qui sont visiblesSELECT * FROM posts WHERE visible = true;

2.Trouver tous les posts qui sont visibles et trier le jeu de rsultats par date de cration en ordre descendant.SELECT * FROM posts WHERE visible = true ORDER BY created DESC;

3.Ajouter l'utilisateur li au jeu de rsultats.SELECT * FROM posts INNER JOIN users ON ( posts.user_id = users.id ) WHERE posts.visible = true ORDER BY posts.created DESC;

4.a. PostgreSQL - Trouver l'id et le title de 2 posts, aliaser le nom de la table (par Post) et prfixer le nom de chaque colonne par Post__SELECT "Post"."id" AS "Post__id", "Post"."title" AS "Post__title" FROM "posts" AS "Post" LEFT JOIN "users" AS "User" ON ("Post"."user_id" = "User"."id") LIMIT 2

4.b. MySQL - Trouver l'id et le title de 2 postsSELECT posts.id, posts.title FROM posts LEFT JOIN users ON (posts.user_id = users.id) LIMIT 2

Programmation oriente objet1. Crez une classe Animal qui possde un attribut publique nom (dont la valeur par dfaut est Animal ) et une mthode publique manger qui affiche mange .class Animal { public $nom = 'Animal'; public function manger() { echo "{$this->nom} mange"; }

Formation CakePHP 1.3.8

Page 2 / 13

}

2. Crez une classe Chien qui hrite de la classe Animal et qui surcharge l'attribut name en lui donnant la valeur par dfaut Mdor .class Chien extends Animal { public $nom = 'Mdor'; }

3. Compltez la classe prcdente en surchargeant la mthode manger pour qu'elle affiche ce qu'affiche la classe Animal, plus une ligne qui affiche est un bon chien .class Chien extends Animal { public $nom = 'Mdor'; public function manger() { parent::manger(); echo "{$this->nom} est un bon chien"; }

}

4. Modifiez la classe prcdente pour ne pas afficher le rsultat de la mthode manger de la classe Animal. la place, affichez est un bon chien qui mange .class Chien extends Animal { public $nom = 'Mdor'; public function manger() { echo "{$this->nom} est un bon chien qui mange"; }

}

Formation CakePHP 1.3.8

Page 3 / 13

Code gnr par la console LocalisationCrez et remplissez le fichier de traduction en franais pour le code gnr par la console (seulement pour la partie posts/edit.ctp). Testez dans votre navigateur.# app/locale/fre/LC_MESSAGES/default.po msgid "Invalid post" msgstr "Billet invalide" msgid "The post has been saved" msgstr "Impossible d'enregistrer le billet" msgid "The post could not be saved. Please, try again." msgstr "Impossible d'enregistrer le billet. Veuillez ressayer"

ParamtresEssayez de dboguer les paramtres qui sont passs au contrleur dans les mthodes index, view et edit du contrleur PostsController.debug( $this->params['pass'] ); // Paramtres GET, faon CakePHP

debug( $this->data ); // Paramtres POST, commenter le redirect pour les voir.

debug( $this->params['named'] ); // Paramtres nomms

Pages d'erreurModifiez le code de la mthode view de la classe PostsController pour envoyer une page 404 lorsque l'enregistrement n'est pas trouv.function view($id = null) { $post = $this->Post->read(null, $id); if( empty( $post ) ) { $this->cakeError( 'error404' ); } $this->set('post', $post);

Formation CakePHP 1.3.8

Page 4 / 13

}

Add / editRegroupez les mthodes add et edit de PostsController ainsi que les vues associes, afin de passer par la mthode _add_edit. PostsControllerfunction add() { $args = func_get_args(); call_user_func_array( array( $this, '_add_edit' ), $args ); } function edit() { $args = func_get_args(); call_user_func_array( array( $this, '_add_edit' ), $args ); } function _add_edit( $id = null ) { if( $this->action == 'edit' ) { $post = $this->Post->read( null, $id ); if( empty( $post ) ) { $this->cakeError( 'error404' ); } } if (!empty($this->data)) { $this->Post->create(); if ($this->Post->save($this->data)) { $this->Session->setFlash(__('The Post has been saved', true)); $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash(__('The Post could not be saved. Please, try again.', true)); } } if( $this>action == 'edit' && empty( $this->data ) ) { $this->data = $post; } $this->render( null, null, '_add_edit' ); }

_add_edit.ctp if( $this->action == 'edit' ) { echo $this->Form->input('id'); } echo $this->Form->input('title'); echo $this->Form->input('user_id'); echo $this->Form->input('visible'); echo $this->Form->input('introduction'); echo $this->Form->input('content'); echo $this->Form->input('Tag');

?>

Formation CakePHP 1.3.8

Page 6 / 13

ModleDans le modle Post, arrangez-vous pour que l'on puisse supprimer un billet mme si son id est cl trangre pour d'autres modles.public $hasMany = array( 'Comment' => array( 'dependent' => true ) );

Dans le contrleur Posts, mthode view, dboguez le nombre d'utilisateurs dont l'id est strictement suprieur 2.$count = $this->Post->User->find( 'count', array( 'conditions' => array( 'User.id >' => 2 ) ) ); debug( $count );

Formation CakePHP 1.3.8

Page 7 / 13

Vue1. Dans la vue index lie au contrleur Posts, changez le colonne user_id en User.username. Au besoin, modifiez la rcursivit dans la mthode du contrleur. Vrifiez que l'on puisse bien trier le tableau de rsultats par nom d'utilisateur. views/posts/index.ctp

controllers/posts_controller.phpfunction index() { $this->Post->recursive = 0; $this->set('posts', $this->paginate()); }

2. Recopiez le layout par dfaut se trouvant dans cake/libs/views/layout/default.ctp dans app/views/layouts/default.ctp. Ajoutez des liens (en utilisant la mthode link du helper Html) vers les pages d'index de tous vos contrleurs. // ...

3. Modifiez la mthode _add_edit du contrleur Posts, la vue associe et le modle associ pour obtenir une liste droulante des utilisateurs pour le champ Post.user_id. Vous utiliserez la mthode find( 'list' ). controllers/posts_controller.php// ... $listUsers = $this->Post->User->find( 'list' ); $this->set( 'listUsers', $listUsers ); $this->render( null, null, '_add_edit' );

Formation CakePHP 1.3.8

Page 8 / 13

}

models/user.php