Mot-clé - cakephp

Fil des billets

vendredi, 17 juillet 2015

CakePHP 3 : manipuler les vues et helpers

Les vues portent l'extension .ctp.

Agréger des contenus


$this->start('sidebar');
echo $this->fetch('sidebar'); // affiche le bloc
echo $this->element('sidebar/popular_topics');
$this->end();

Échapper du texte


echo h($user->bio);

Helpers

Form

Créer des formulaires


// si () ∅, controller route courante / envoi en POST
echo $this->Form->create();

// sinon :
echo $this->Form->create(null, ['url' => [
    'controller' => 'Articles',
	'action' => 'publish'],
	'type' => 'GET'...);

echo $this->Form->input('nom_champ_db', array(
'label'=>'...',
'type'=>'...',
'placeholder'=>'...',
'required'=>TRUE
));
// le format du champ s'adapte en fonction du type défini
// dans la DB (ex : id=hidden, longtext=textarea).
// Pour modifier, changer le type (SAUF inputs radio)

// ou (nomenclature spécifique selon le type)
echo $this->Form->text('nom_champ_db', ['options'=>'...']);
echo $this->Form->password('password');
echo $this->Form->hidden('id');
echo $this->Form->textarea('blabla', 'escape'=>FALSE);
echo $this->Form->checkbox('Oui', ['value'=> 555]);
echo $this->Form->radio(
    'favorite_color',
    [
        ['value'=>'r','text'=>'Red','style'=>'color:red;'],
        ['value'=>'u','text'=>'Blue','class'=>'blue'],
        ['value'=> 'g','text'=>'Green','id'=>'green'],
    ]
);
echo $this->Form->select('nom_champ_db',$array_options,['multiple'=>'checkbox']); // multiple facultatif
echo $this->Form->dateTime/time/year/month/day/hour/minute('nom_champ_db'); // * selon les besoins
echo $this->Form->label('nom_champ_db','Label souhaité');

// les fichiers nécessitent l'ajout d'option dans le create
echo->this->Form->create($document, ['enctype'=>'multipart/form-data']);
echo $this->Form->file('file');

echo $this->Form->submit();
echo $this->Form->end('Valeur du submit');

HTML

Créer des liens


$this->Html->charset('format');
$this->Html->css('style'); // recherche dans webroot/css
$this->Html->css(['forms', 'tables', 'menu']); // styles multiples
$this->Html->script('scripts'); // recherche dans webroot/js
$this->Html->image('cake_logo.png', ['alt' => 'CakePHP']); // recherche dans webroot/img
$this->Html->link('Valeur', '/pages/home', ['class' => 'button', 'target' => '_blank']);
$this->Html->link('Effacer', [
'controller' => 'Articles',
'action' => 'delete', 6],
['confirm' => 'Êtes-vous sûr d\'effacer ?']
);
$this->Html->media('audio.mp3');

Sources

jeudi, 16 juillet 2015

CakePHP 3 : manipuler les modèles

Initialize

Elle permet de déclarer l'ensemble de la configuration du modèle et des associations avec les autres modèles.

public function initialize(array $config) {
 $this->belongsTo('Articles');
 $this->belongsToMany('Tags');
}

TableRegistry

Cette fonction permet de récupérer la configuration des connexions et métadonnées liées aux tables. Elle rend les données accessibles en objets.

// controller
use Cake\ORM\TableRegistry;

$articles = TableRegistry::get('Articles');

$query = $articles->find();

foreach ($query as $row) {
    echo $row->title;
}

Requête avec fonction


// model / table
public function findDuree(Query $query) {
 $query->select(['avg_duree_appel'=>$query->func()->avg('duree_appel')]);
 return $query;
}

// controller
$avg = $appel->find('Duree')->toArray();

Jointure

// model / table
use Cake\ORM\Query;

public function findGetUser(Query $query) {
 $query->select(['Utilisateurs.nom'])->contain('Utilisateurs');
 return $query;
}

// controller
$users = $appel->find('GetUser');
// isoler le find de la méthode provenant du modèle

Sources

mercredi, 15 juillet 2015

CakePHP 3 : manipuler les contrôleurs

Appeler une vue depuis le contrôleur


class PostsController extends AppController {
    public function my_action() {
        $this->render('custom_file'); }
		// Affiche src/Template/Posts/custom_file.ctp
		// au lieu de src/Template/Posts/my_action.ctp
}

Transmettre des données du contrôleur à la vue


$this->set('framework', 'cakephp'); // controller
echo "Vous utilisez $framework;" // view

// controller
$data = array(
'livre' => 'Léviathan',
'auteur' => 'Paul Auster',
'type' => 'roman');
$this->set($data);

// view
echo $livre.' / '.$auteur.' - '.$type;

Redirections


return $this->redirect('http://www.unsite.eu'); // absolute
return $this->redirect('/controller/function'); // relative
$this->setAction('index'); // same controller, other action

Requêtes


$articles = $this->Articles->find('all');
$artcond = $this->Articles
->find()
->where(array('Articles.validated' => 1))
->order(array('Articles.created' => 'DESC'));
$artcondlimit = $artcond->limit(10);

Requêtes - Réponses

La requête permet d'accéder aux différentes informations liées à la requête.


$this->request

La réponse permet à l'application de construire la réponse qui doit être retournée au client (header, download, etc.)


$this->response

Afficher un menu déroulant avec les entrées d'une DB


// model > créer AgesTable.php avec le contenu suivant :
namespace App\Model\Table;
use Cake\ORM\Table;
class AgesTable extends Table {
    // code...
}

// CONTROLLER
$this->loadModel('Ages');
$ages = $this->Ages->find('list',[
	'keyField' => 'age_id',
    'valueField' => 'age_title']);
$data = $ages->toArray();
$this->set(compact('ages',$data));
// devient $ages dans la vue

// VIEW
echo $this->Form->input('age_id',['options'=>$ages]);

Sources

lundi, 15 juin 2015

CakePHP : démarrage

Installer CakePHP 3.0cake.png

  • Installer Composer
  • Installer CakePHP : depuis l'invite de commandes, accéder au dossier www/htdocs de votre wamp/xampp et exécuter la commande suivante :
    composer create-project --prefer-dist cakephp/app [app_name]
  • Mettre à jour CakePHP : la dernière version stable du framework sera installée en exécutant à partir du dossier générique de l'appli la commande suivante :
    composer update
  • Établir la connexion à la base de données : adapter les paramètres sous config > app.php (datasources > default)

Utilisation de CakePHP 3.0 : préambules

Architecture MVC

mvc.png

Le contrôleur (controller) est l'intermédiaire entre le modèle et la vue : le contrôleur demande au modèle les données, les analyse, traite les conditions et renvoie le contenu à afficher à la vue.

Le modèle (model) gère les données : son rôle est d'aller récupérer les informations dans la base de données, de les organiser et de les assembler pour qu'elles puissent ensuite être traitées par le contrôleur.

La vue (view) récupère les variables et les affiche.

[object Object]

Source : http://css.dzone.com/news/mvc-fat-models-and-skinny

memovc.png

  • Il y a autant de vues qu'il y a d'actions dans le contrôleur.
  • Il y a autant de dossiers de vue (sous Template) qu'il y a de contrôleurs.

Conventions de nommage

  • Nom des tables de la base de données : people, derniers_articles
  • Id dans les tables de la base de données : id
  • Clé étrangère de la base de données : table_id
  • Class Table : PeopleTable sous src/Model/Table/PeopleTable.php ((Attention : les pluriels francophones ne sont pas tous compris de Cake (ex : cheval/chevaux).))
  • Class Entity : Person sous src/Model/Entity/Person.php ((Attention : certains singuliers francophones peuvent être pris à tort pour des pluriels par Cake (ex : tapis, concours...)))
  • Class Controller : PeopleController sous src/Controller/PeopleController.php
  • View sous src/Template/People/add_person.ctp (src/Template/NameController/nom_methode_avec_underscore.ctp)
  • Les tables de jointure utilisées dans les relations BelongsToMany entre modèles doivent être nommées d’après le nom des tables qu’elles unissent, dans l’ordre alphabétique : pommes_zebres (zebres_pommes)

⚠ Si ces conventions ne sont pas respectées, il ne faut pas compter sur les automatisations liées à la migration pour que l'application fonctionne...

Migration

Après avoir établi la connexion à la base de données, se rendre sous wamp > www > nom de l'app cake3 via le terminal. Charger les dépendances liées à la tâche de migration comme suit :


composer require cakephp/migrations "@stable"

(Vérifier que le plugin "Migrations" est bien chargé sous config > bootstrap.php (fin de fichier).) Sous bin :


cake migrations migrate

Générer tous les fichiers liés à la DB (répéter autant de fois qu'il y a de tables dans la base de données) :


cake bake all [Nom table]

Sources

dimanche, 13 octobre 2013

Frameworks PHP : comparaison

* Liste non exhaustive

Symfonysymfony.png

Zend Frameworkzend.png

CakePHPcakephp

CodeIgnitercodeigniter.png

Yiiyii.png

Laravellaravel.png

Kohanakohana.png

FuelPHPfuelphp.png

Comparatifs