Gestion des dépendances dans un projet PHP - Forum PHP 2012Jean-Marc Fontaine
Que ce soit un framework, des modules ou des libraires spécialisées, la plupart des application web modernes utilisent du code tiers. Ce code a son propre cycle de développement. Il faut donc pouvoir intégrer régulièrement les nouvelles versions sans pour autant perdre la maîtrise de son propre cycle. La tâche n'est pas aisée si elle n'a pas été été prévue dès la conception de l'application. Nous verrons différentes approches pour gérer les dépendances dont les gestionnaires de paquet du système d'exploitation, les liens externes dans les dépôts de code, les fichiers PHAR, l'installateur PEAR et le tout récent Composer.
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
Avec cette nouvelle version de votre framework préféré, de nouvelles fonctionnalités et de nouveaux usages sont apparus. Vous vous demandez comment structurer vos bundles? Comment organiser votre code source? Comment utiliser correctement l'injecteur de dépendance? Venez découvrir au cours de cette session les bonnes pratiques, et quelques astuces, qui vous aiderons dans la réalisation de vos projets avec Symfony2.
Le système de blocs a été présent depuis les origines de Drupal sur drop.org jusqu'à aujourd'hui dans Drupal 8.
Cette présentation retrace l'historique de son développement, et plus largement celui de Drupal dans son ensemble.
Cette nouvelle version du framework a été entièrement réécrite afin de tirer profit de PHP 5.3 d'une part mais également de corriger les erreurs du passé avec symfony 1.x.
Cette nouvelle version regorge de fonctionnalités puissantes pour vous aider à bâtir des applications web maintenables, pérennes, performantes et évolutives.
Cette présentation donne un aperçu des nouvelles fonctionnalités de Symfony2 comme l'architecture MVC, les tests automatisés ou bien encore l'envoi d'emails.
Au cours de cette session, nous présenterons d'une manière générale toutes les caractéristiques qui font de symfony un framework open source tourné vers le monde professionnel.
Il s'agira dans un premier temps de montrer que symfony n'est pas seulement une base de code mais un projet open source à part entière disposant d'un écosystème riche sur lequel n'importe quel développeur peut compter.
Nous porterons ensuite un oeil plus attentif aux fonctionnalités phares du framework telles que sa couche d'abstraction de base de données, son interface en ligne de commande, le routing bidirectionnel, les outils de test automatisés ou bien encore le générateur automatique de backoffice.
Gestion des dépendances dans un projet PHP - Forum PHP 2012Jean-Marc Fontaine
Que ce soit un framework, des modules ou des libraires spécialisées, la plupart des application web modernes utilisent du code tiers. Ce code a son propre cycle de développement. Il faut donc pouvoir intégrer régulièrement les nouvelles versions sans pour autant perdre la maîtrise de son propre cycle. La tâche n'est pas aisée si elle n'a pas été été prévue dès la conception de l'application. Nous verrons différentes approches pour gérer les dépendances dont les gestionnaires de paquet du système d'exploitation, les liens externes dans les dépôts de code, les fichiers PHAR, l'installateur PEAR et le tout récent Composer.
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
Avec cette nouvelle version de votre framework préféré, de nouvelles fonctionnalités et de nouveaux usages sont apparus. Vous vous demandez comment structurer vos bundles? Comment organiser votre code source? Comment utiliser correctement l'injecteur de dépendance? Venez découvrir au cours de cette session les bonnes pratiques, et quelques astuces, qui vous aiderons dans la réalisation de vos projets avec Symfony2.
Le système de blocs a été présent depuis les origines de Drupal sur drop.org jusqu'à aujourd'hui dans Drupal 8.
Cette présentation retrace l'historique de son développement, et plus largement celui de Drupal dans son ensemble.
Cette nouvelle version du framework a été entièrement réécrite afin de tirer profit de PHP 5.3 d'une part mais également de corriger les erreurs du passé avec symfony 1.x.
Cette nouvelle version regorge de fonctionnalités puissantes pour vous aider à bâtir des applications web maintenables, pérennes, performantes et évolutives.
Cette présentation donne un aperçu des nouvelles fonctionnalités de Symfony2 comme l'architecture MVC, les tests automatisés ou bien encore l'envoi d'emails.
Au cours de cette session, nous présenterons d'une manière générale toutes les caractéristiques qui font de symfony un framework open source tourné vers le monde professionnel.
Il s'agira dans un premier temps de montrer que symfony n'est pas seulement une base de code mais un projet open source à part entière disposant d'un écosystème riche sur lequel n'importe quel développeur peut compter.
Nous porterons ensuite un oeil plus attentif aux fonctionnalités phares du framework telles que sa couche d'abstraction de base de données, son interface en ligne de commande, le routing bidirectionnel, les outils de test automatisés ou bien encore le générateur automatique de backoffice.
Comment se charge WordPress ? Le loading du core.Boiteaweb
Présentation WordPress donnée au WPTech 2014.
Le chargement de WordPress reste un mystère pour beaucoup d’entre nous.
Entrons dans les entrailles du démarrage de WordPress, trouvons ce qui se passe, quels hooks sont lancés et comprenez alors pourquoi certaines actions nécessites d’être hookées, comprenez l’intérêt des priorités, comprenez pourquoi nous lançons certaines actions trop tard.
Premier chapitre d'une formation Symfony 2,
l'Objectif de ce chapitre peut se résumer dans les points suivants :
- Présentation du framework Symfony en sa version 2.x
- Première installation de Symfony, et découvert de son arborescence projet
- Notion des Bundles : Notion de contrôleur et Vue + Réalisation d'un premier contrôleur
- Système des Routes : utilisation des annotations pour définir des routes
Depuis quelques années Git s'est imposé comme le système de gestion de sources de référence. Simple, rapide , souple, il convient à la fois aux workflows traditionnels et aux workflows distribués. Après une introductions aux principes fondateurs de Git le stagiaire aura l'occasion d'apprendre à créer son premier repository git et à le manipuler localement avant de le partager avec les autres. La formation insistera sur la gestions des branches et la résolution des conflits et sur les commandes permettant d'aborder ces problématiques sereinement. A l'issue de cette formation le stagiaire sera autonome pour utiliser Git aussi bien individuellement qu'au sein d'une équipe.
Savoir quelle solution de supervision choisir est toujours délicat et surtout avec la panoplie de produits qui existent, dans cet ouvrage retrouvez toute une comparaison "pratique" des solutions régnantes sur le marché et surtout comment et Pas à Pas implémenter Nagios et ses sur-couches afin de cacher un peu son interface dite fastidieuse et encombrante autrement dit l'interface d'administration sera embelli avec des graphes et des Maps afin de détecter rapidement un problème dans son réseau et cela juste par un coup d’œil. Tous les problèmes d'installation et de paramétrage sont traitées et bien détaillé afin de pouvoir installer son Nagios en toute fluidité et rapidité chose qui est rare dans un tutoriel.
Comment créer des hooks dans vos développements WordPress - WP Tech 2015Boiteaweb
Je vous ai déjà parlé de comment choisir vos hooks à Paris en 2013, vous savez peut-être déjà ajouter des filtres et actions, mais en ajoutez-vous dans vos développements ?
J’aimerai prendre un moment avec vous pour vous donner l’envie de créer vos propres hooks et bien sûr de bien le faire, dans les (nouvelles) règles WordPress.
Deuxième chapitre d'une formation Symfony 2,
l'Objectif de ce chapitre peut se résumer dans les points suivants :
- Présentation du moteur de template Twig
- Syntaxe et utilisation du moteur de template Twig dans les vues des contrôleurs
- Passer des variables depuis les contrôleurs vers les vues
Atelier WordPress: Création d’extension WordPressIZZA Samir
Initiation aux développement de plugin WordPress, inclus 3 tutoriels:
TP1: Hello World.
TP2: Compteur de visites.
TP3: Création du bouton « j’aime » de Facebook
Présentation effectuée au Meetup Programmez (08 septembre 2020)par Christophe Villeneuve sur "Etes-vous prêt pour PHP 8 ?".
Vous allez voir l'avancement du langage PHP, les nouveautés, les améliorations
http://articles.nissone.com/2014/11/gitpourlanulle/
Je comprenais mal Git, m’emmêlais dans les notions de branches, de fork et de commit. J’ai demandé des explications à Julien. J’ai mis ça en images et avec mes mots. Je vous le partage (CC by SA), des fois que ça vous serve aussi.
Comment se charge WordPress ? Le loading du core.Boiteaweb
Présentation WordPress donnée au WPTech 2014.
Le chargement de WordPress reste un mystère pour beaucoup d’entre nous.
Entrons dans les entrailles du démarrage de WordPress, trouvons ce qui se passe, quels hooks sont lancés et comprenez alors pourquoi certaines actions nécessites d’être hookées, comprenez l’intérêt des priorités, comprenez pourquoi nous lançons certaines actions trop tard.
Premier chapitre d'une formation Symfony 2,
l'Objectif de ce chapitre peut se résumer dans les points suivants :
- Présentation du framework Symfony en sa version 2.x
- Première installation de Symfony, et découvert de son arborescence projet
- Notion des Bundles : Notion de contrôleur et Vue + Réalisation d'un premier contrôleur
- Système des Routes : utilisation des annotations pour définir des routes
Depuis quelques années Git s'est imposé comme le système de gestion de sources de référence. Simple, rapide , souple, il convient à la fois aux workflows traditionnels et aux workflows distribués. Après une introductions aux principes fondateurs de Git le stagiaire aura l'occasion d'apprendre à créer son premier repository git et à le manipuler localement avant de le partager avec les autres. La formation insistera sur la gestions des branches et la résolution des conflits et sur les commandes permettant d'aborder ces problématiques sereinement. A l'issue de cette formation le stagiaire sera autonome pour utiliser Git aussi bien individuellement qu'au sein d'une équipe.
Savoir quelle solution de supervision choisir est toujours délicat et surtout avec la panoplie de produits qui existent, dans cet ouvrage retrouvez toute une comparaison "pratique" des solutions régnantes sur le marché et surtout comment et Pas à Pas implémenter Nagios et ses sur-couches afin de cacher un peu son interface dite fastidieuse et encombrante autrement dit l'interface d'administration sera embelli avec des graphes et des Maps afin de détecter rapidement un problème dans son réseau et cela juste par un coup d’œil. Tous les problèmes d'installation et de paramétrage sont traitées et bien détaillé afin de pouvoir installer son Nagios en toute fluidité et rapidité chose qui est rare dans un tutoriel.
Comment créer des hooks dans vos développements WordPress - WP Tech 2015Boiteaweb
Je vous ai déjà parlé de comment choisir vos hooks à Paris en 2013, vous savez peut-être déjà ajouter des filtres et actions, mais en ajoutez-vous dans vos développements ?
J’aimerai prendre un moment avec vous pour vous donner l’envie de créer vos propres hooks et bien sûr de bien le faire, dans les (nouvelles) règles WordPress.
Deuxième chapitre d'une formation Symfony 2,
l'Objectif de ce chapitre peut se résumer dans les points suivants :
- Présentation du moteur de template Twig
- Syntaxe et utilisation du moteur de template Twig dans les vues des contrôleurs
- Passer des variables depuis les contrôleurs vers les vues
Atelier WordPress: Création d’extension WordPressIZZA Samir
Initiation aux développement de plugin WordPress, inclus 3 tutoriels:
TP1: Hello World.
TP2: Compteur de visites.
TP3: Création du bouton « j’aime » de Facebook
Présentation effectuée au Meetup Programmez (08 septembre 2020)par Christophe Villeneuve sur "Etes-vous prêt pour PHP 8 ?".
Vous allez voir l'avancement du langage PHP, les nouveautés, les améliorations
http://articles.nissone.com/2014/11/gitpourlanulle/
Je comprenais mal Git, m’emmêlais dans les notions de branches, de fork et de commit. J’ai demandé des explications à Julien. J’ai mis ça en images et avec mes mots. Je vous le partage (CC by SA), des fois que ça vous serve aussi.
SENAT Rapport d'information sur le numérique, le renseignement et la vie priv...Daniel Dufourt
SENAT
Rapport d'information n° 663 fait
au nom de la commission des lois constitutionnelles, de législation, du suffrage
universel, du Règlement et d’administration générale (1) sur le numérique, le
renseignement et la vie privée : de nouveaux défis pour le droit,
Par M. Jean-Pierre SUEUR,
Sénateur.
Enregistré à la présidence le 27 juin 2014
El documento describe el calentamiento global y sus causas. Explica que la mayoría de los científicos están de acuerdo en que el calentamiento global es causado principalmente por las emisiones humanas de gases de efecto invernadero. Los efectos incluyen el aumento de las temperaturas globales, la subida del nivel del mar y cambios en los patrones de precipitación. Además, se espera que el calentamiento sea mayor en el Ártico, con el retroceso de los glaciares y la banquisa.
Consommer responsable, c’est presque acquis ! Mais si chacun s’y engage de plus en plus c’est selon ses propres préoccupations ou motivations tandis que le pouvoir des actions collectives est de plus fort. Un paradoxe, reflet de la société civile et, décrypté par « Un pour un, Un pour tous », l’étude typologique de consommateurs réalisée par Ethicity.
WordCamp Lyon 2015 - WordPress, Git et l'intégration continueStéphane HULARD
Retour d'expérience sur les pratiques que j'utilise au quotidien pour l'industrialisation de mes développements WordPress...
https://lyon.wordcamp.org/2015/session/wordpress-git-et-lintegration-continue/
Objectif général
Prendre en main l’un des framework PHP les plus utilisés
Objectifs opérationnels
Structurer les fonctionnalités grâce aux bundles
Faire correspondre une URL donnée à un traitement précis grâce au routage
Traiter les requêtes grâce aux contrôleurs
Intégrer des données dans des templates grâce à TWIG
Faciliter la communication avec une base de données grâce à Doctrine
Permettre à un utilisateur d’initialiser ou de modifier les attributs d'un objet métier grâce aux formulaires
Bien que Docker soit facile d'utilisation, construire une image reste un exercice compliqué.
Optimisation, layers, et sécurité nécessitent de s'abstraire des Dockerfile basiques qu'on peut trouver sur internet.
Dans ce BBL, nous verrons comment bien packager une application Spring Boot dans une image Docker/OCI.
Nous allons parcourir les bonnes pratiques préconisées par Spring, les pièges à éviter, comment bien écrire un Dockerfile pour optimiser la construction et l'image finale pour une exécution dans Kubernetes et nous verrons aussi des moyens alternatifs de construction d'images Spring Boot et l'outillage d'analyse à ajouter à votre toolbox.
Dans ce fichier, je défini ce qu'est make (et makefile), je vous montrerai comment l'utiliser dans le cadre de Wordpress (avec WP-CLI).
Je vous donne aussi quelques exemples d'utilisation avec WP-CLI.
Atelier Framework Web Côté Serveur
TP N° 2
Les Bases de Symfony
Objectifs
• Découvrir l’architecture d’un projet Symfony et son principe de fonctionnement,
• Découvrir la structure des fichiers PHP sous Symfony (namespace, Class, use, …)
• Créer un Bundle et découvrir son architecture,
• Découvrir les Contrôleurs et les Routes.
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Pierre Ternon
Vous êtes intégrateur Drupal et vous souhaitez augmenter l'efficacité de vos process de gestion de projet ?
Voici une présentation globale d'un jeu de différents outils classiques. Combinés entre eux, il fluidifieront et automatiseront les échanges, vous permettant ainsi d'augmenter la taille de vos projets, celle de vos équipes, équipes parfois devenues géographiquement éclatées.
* Gestion de tickets et centralisation documentaire avec Redmine
* Versionnement de code avec Git
* Déploiements avec Features, Drush, Jenkins
* Dématérialisation de la communication avec Skype, Hangout ou autres, IRC
* Tests avec Selenium
* Montée en charge avec Tsung
Le présent document décrit les différentes étapes d’installation et de configuration des différents outils utilisés notamment Eclipse, est suit l’organisation suivante :
• 1ere partie :
Dans cette première partie vous trouverez les différentes étapes d’installation – à suivre - des différents outils nécessaires au bon fonctionnement d’Openbravo.
• 2eme partie :
Dans cette deuxième partie vous trouverez la configuration détaillée de l’IDE Eclipse pour assurer une bonne intégration du code.
• Comment installer Apache Flink sur votre PC ou Mac et comment se familiariser avec CLI, Job Client Web interface et Job Manager Web Interface?
• Comment développer une application Big Data en Java / Scala en utilisant un IDE?
• Comment développer avec Apache Flink en mode interactif avec Flink Shell ou Zeppelin Notebook (Scala)?
http://www.meetup.com/fr/Paris-Apache-Flink-Meetup/events/225577395/
Similaire à À La découverte de flow3 - t3con12 (20)
2. Mehdi Guermazi
À la découverte de FLOW 3
Mehdi Guermazi
● Diplômé en Administration des affaires SIO
(Université Laval)
● Consultant web chez Infoglobe (2009)
● Membre fondateur de « La voix du libre » sur CKIA FM 88,3
● Habite à Québec
● J'aime faire de la musique, de la radio et du snow trash
3. Mehdi Guermazi
À la découverte de FLOW 3
Introduction FLOW3
● Environnement de développement d'application web fait en PHP
● Gratuit et opensource (LGPL v3)
● Vient concurrencer Symfony, CakePHP, CodeIgniter etc...
● Supporté par la communauté TYPO3 sous les ordres de Robert
Lemke (6000+ contributeurs)
● Regroupe la plupart des concepts en vogue : programmation
orientée aspects, domain-driven design, développement piloté par
les tests, l'intégration continue...
4. Mehdi Guermazi
À la découverte de FLOW 3
Historique
● Au début l'objectif était de restructurer le code pour TYPO3 V5
● Essai de différents environnements de développement
● Décision de créer FLOW3 qui englobe tous les bons points des
autres environnements de développement
5. Mehdi Guermazi
À la découverte de FLOW 3
Exigences minimales
● Un serveur web (Apache est recommandé avec le module
mod_rewrite activé)
● PHP 5.3.2 ou plus récent
● Une base de données compatible PDO comme MySQL
● Accès en ligne de commande
http://flow3.typo3.org/download
6. Mehdi Guermazi
À la découverte de FLOW 3
Installation de FLOW3
● Décompressez le dossier téléchargé dans votre dossier htdocs
● Configurer les droits d'accès aux fichiers
º ./flow3 core:setfilepermissions john www-data www-data
º Remplacer john par votre nom d'utilisateur
● Ajouter un nom de domaine dans fichier hosts
● Modifier la configuration du virtual host
/etc/apache2/sites-available/default
● Modifier la configuration générale dans un fichier de format yaml
7. Mehdi Guermazi
À la découverte de FLOW 3
Configuration du virtual host
<VirtualHost *:80>
DocumentRoot /var/www/FLOW3-1.0.3/Web
ServerName dev.confooflow3.local
SetEnv FLOW3_CONTEXT Development
<Directory /var/www/FLOW3-1.0.3/>
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/FLOW3-1.0.3/Web
ServerName confooflow3.local
SetEnv FLOW3_CONTEXT Production
<Directory /var/www/FLOW3-1.0.3/>
AllowOverride All
</Directory>
</VirtualHost>
8. Mehdi Guermazi
À la découverte de FLOW 3
Configuration/Settings.yaml (Base de données)
######################
# Global Settings
######################
FLOW3:
persistence:
backendOptions:
driver: 'pdo_mysql'
dbname: 'confooflow3'
user: 'confooflow3'
password: 'confooflow3'
host: '127.0.0.1'
path: '127.0.0.1'
Port: 3306
doctrine:
dbal:
sessionInitialization: 'SET NAMES utf8 COLLATE utf8_unicode_ci'
10. Mehdi Guermazi
À la découverte de FLOW 3
Création d'un package (Application web)
● Le code d'une application et ces ressources (comme les images,
feuilles de style et gabarits) sont rassemblés dans un « Package »
● Chaque application est définie par une clé unique globale qui se
compose du nom de votre compagnie et du nom de l'application.
● Le script Kickstart nous permet de créer une structure de base
pour notre nouvelle application
./flow3 kickstart:package Infoglobe.Demo
● Le script crée aussi un contrôleur par défaut qu'on peut afficher en
visitant l'adresse suivante :
dev.confooflow3.local/Infoglobe.Demo/
11. Mehdi Guermazi
À la découverte de FLOW 3
Aperçu d'un contrôleur
● Le contrôleur « StandardController » créé par défaut par le
Kickstarter se retrouve dans
Packages/Application/Infoglobe.Demo/Classes/Controller/
● Une méthode (fonction) indexAction est déjà créée c'est grâce à
cette fonction qu'on a obtenu le résultat d'affichage dans le
navigateur
● Créons l'action Hello ensemble : (Important!!! Les commentaires)
/**
* Hello action
*
* @param string $name Your name
* @return string The hello
*/
public function helloAction($name) {
return 'Hello ' . $name . '!';
}
12. Mehdi Guermazi
À la découverte de FLOW 3
Focus sur le domaine de travail
(Domain Driven Design)
Un objectif important lors de la conception de FLOW3
était de laisser le développeur se concentrer sur la logique
du domaine de l'application (du domaine de travail de leur
client) et de travailler dans un vrai environnement orienté-
objet.
Alors que vous développez une application FLOW3, vous
ne vous rendrez pas compte que le contenu est vraiment
stocké dans une base de données. Votre code ne
contiendra aucune requête SQL et vous n'aurez pas à
créer la structure de vos tables.
13. Mehdi Guermazi
À la découverte de FLOW 3
Domain Driven Design
● Une méthode de travail qui :
● Fournit un langage commun à toute l'équipe (les développeurs,
les concepteurs, le client)
● Simplifie la conception d'applications complexes
● Permet de se concentrer sur le domaine et la logique du
domaine d'activité du client
● FLOW3 est le premier environnement de développement accès
sur la conception selon de le domaine de travail.
14. Mehdi Guermazi
À la découverte de FLOW 3
Prenons un petit raccourcis
● Au lieu de programmer notre propre contrôleur, notre propre
modèle et notre propre vue, nous allons générer un exemple
● Nous allons créer un objet Film :
./flow3 kickstart:actioncontroller --generate-actions --generate-related
Infoglobe.Demo Film
15. Mehdi Guermazi
À la découverte de FLOW 3
Regardons de plus prêt
● L'indexAction affiche une liste de films. Tout ce que ça fait c'est
aller chercher l'information dans un dépôt (repository) et les
donner à la vue (View)
/**
* Shows a list of films
*
* @return void
*/
public function indexAction() {
$this->view->assign('films', $this->filmRepository->findAll());
}
16. Mehdi Guermazi
À la découverte de FLOW 3
Regardons de plus prêt
● Le repository prend soin de stocker ou de chercher les films déjà
stockés. La plus simple méthode utilisée est findAll() qui retourne
une liste de tous les objets de type Film
/**
* @FLOW3Inject
* @var InfoglobeDemoDomainRepositoryFilmRepository
*/
protected $filmRepository;
17. Mehdi Guermazi
À la découverte de FLOW 3
Regardons de plus prêt
● PHP ne supporte pas les annotations nativement
● FLOW3 utilise les commentaires qui sont analysés par un parseur
● Par exemple l'annotation Inject demande à appeler la classe
FilmRepository tout juste après que la classe FilmController soit
instanciée
/**
* @FLOW3Inject
* @var InfoglobeDemoDomainRepositoryFilmRepository
*/
protected $filmRepository;
18. Mehdi Guermazi
À la découverte de FLOW 3
Regardons de plus prêt
● Puisque FLOW3 repose sur un modèle MVC c'est la vue qui
s'occupe de l'affichage
● On retrouve la vue correspondante à une action d'un contrôleur de
Film dans le dossier Resouces/Private/Templates/Film/
Pour index c'est Resouces/Private/Templates/Film/Index.html
19. Mehdi Guermazi
À la découverte de FLOW 3
Regardons de plus prêt
● Les vues peuvent afficher le contenu qui a été affecté à des variables de gabarit
● L'espace réservé {Film.name} sera remplacé par la valeur réelle du nom de variable de
gabarit une fois le modèle est rendu.
● Les films pris dans le repository sont assignés à la variable de gabarit films. Le Gabarit
utilise une boucle for each pour afficher la liste de films
<ul>
<f:for each="{films}" as="film">
<li>
<f:link.action action="show" arguments="{film: film}">{film.name}</f:link.action>
<f:link.action action="edit" arguments="{film: film}">Edit</f:link.action>
<f:link.action action="delete" arguments="{film: film}">Delete</f:link.action>
</li>
</f:for>
</ul>
20. Mehdi Guermazi
À la découverte de FLOW 3
Regardons de plus prêt
● Pour afficher un lien
<f:link.action action="show" arguments="{film: film}">{film.name}</f:link.action>
● La partie intéressant est l'attribut argments qui contient {film:film}
On renvoie dans les paramètres de l'url l'objet film qui a été
assigné dans la varaible de gabarit film.
● Dans l'attribut action on a choisit l'action « show » donc on appelle
le contrôleur actuel Film et l'action showAction en lui renvoyant
l'objet film.
● Si on clique sur le lien la méthode showAction sera appelée.
21. Mehdi Guermazi
À la découverte de FLOW 3
Regardons de plus prêt
● newAction ne contient aucun code PHP elle ne fait qu'afficher la
vue qui contient seulement un formulaire.
● CreateAction est appelé quand le formulaire affiché par newAction
est soumis. Elle attend un objet de type film. Cette fois c'est un
nouveau et non un film existant.
● Il faut donc le créer dans la repository
$this->filmRepository->add($newFilm);
● On affiche aussi un message à l'utilisateur pour lui affirmer que
son film a été créé
$this->addFlashMessage('Created a new film.');
22. Mehdi Guermazi
À la découverte de FLOW 3
Le repository
/**
* Finds most recent posts excluding the given post
*
* @param F3BlogDomainModelPost $post Post to exclude from result
* @param integer $limit The number of posts to return at max
* @return array All posts of the $post's blog except for $post
*/
public function findRecentExceptThis(F3BlogDomainModelPost $post, $limit = 20) {
$query = $this->createQuery();
$posts = $query->matching($query->equals('blog', $post->getBlog()))
->setOrderings(array('date' =>
F3FLOW3PersistenceQueryInterface::ORDER_DESCENDING))
->setLimit($limit)
->execute()
->toArray();
unset($posts[array_search($post, $posts)]);
return $posts;
}
23. Mehdi Guermazi
À la découverte de FLOW 3
Le Modèle si on utilise doctrine 2 pure
<?php
namespace MyExample;
/**
* @Entity(repositoryClass="BugRepository")
*/
class Bug {
/**
* @var integer
* @Id
* @Column(type="integer")
* @GeneratedValue
*/
public $id;
/**
* @var string
* @Column(type="string")
*/
public $description
24. Mehdi Guermazi
À la découverte de FLOW 3
Doctrine 2 dans FLOW3
<?php
namespace MyExample;
/**
* @Entity(repositoryClass="BugRepository")
*/
class Bug {
/**
* @var integer
* @Id
* @Column(type="integer")
* @GeneratedValue
*/
public $id;
/**
* @var string
* @Column(type="string")
*/
public $description
25. Mehdi Guermazi
À la découverte de FLOW 3
La vue
FLOW3 est livré avec un élégant, souple et sécurisé
moteur de gabarits: Fluid
● Les modèles sont valables HTML
● Les modèles ne contiennent pas de code PHP
● l'accès aux objets, des structures de contrôle, boucles ...
● designer-friendly
● extensible (les aides de vue, les widgets)
26. Mehdi Guermazi
À la découverte de FLOW 3
La vue
Exemple pour attribuer une chaîne à une variable fluid
// Dans le contrôleur
$this->view->assign('title', 'Welcome to Fluid');
<!-- Dans un gabarit fluid: -->
<head>
<title>{title}</title>
</head>
27. Mehdi Guermazi
À la découverte de FLOW 3
La vue
Les variables peuvent être des objets
// Dans le contrôleur
$this->view->assign('conference', $conference);
<!-- Dans un gabarit fluid: -->
<div class="venue">
<p>Venue Street: {conference.venue.street}</p>
</div>
28. Mehdi Guermazi
À la découverte de FLOW 3
La vue - Conditions
// Dans le contrôleur
$this->view->assign('post', $blogPost);
<!-- Dans un gabarit fluid: -->
<f:if condition="{post.comments}">
<f:then>There are some comments.</f:then>
<f:else>There are no comments.</f:else>
</f:if>
29. Mehdi Guermazi
À la découverte de FLOW 3
La vue - Boucles
// Dans le contrôleur
$this->view->assign('ages', array("Karsten" => 34, "Robert" => 35));
<!-- Dans un gabarit fluid: -->
<ul>
<f:for each="{ages}" as="age" key="name">
<li>{name} is {age} year old.</li>
</f:for>
</ul>
30. Mehdi Guermazi
À la découverte de FLOW 3
La vue - Boucles
// Dans le contrôleur
$this->view->assign('post', $blogPost);
<!-- Dans un gabarit fluid: -->
<f:if condition="{post.comments}">
<ul>
<f:for each="{post.comments}" as="comment" >
<li>{post.title}</li>
</f:for>
</ul>
</f:if>
31. Mehdi Guermazi
À la découverte de FLOW 3
Templating – Formulaire (modèle)
<?php
namespace InfoglobeDemoDomainModel;
use TYPO3FLOW3Annotations as FLOW3;
/**
* A Film
*
* @FLOW3Scope("prototype")
* @FLOW3Entity
*/
class Film {
/**
* The name
* @var string
*/
protected $name;
32. Mehdi Guermazi
À la découverte de FLOW 3
Templating – Formulaire (Vue)
<f:layout name="Default" />
<f:section name="Title">New film</f:section>
<f:section name="Content">
<p>Just fill out the following form to create a new film:</p>
<f:form action="create" name="newFilm">
<ol>
<li>
<label for="name">Name</label>
<f:form.textfield property="name" id="name" />
</li>
<li>
<f:form.submit value="Create" />
</li>
</ol>
</f:form>
</f:section>
33. Mehdi Guermazi
À la découverte de FLOW 3
Validation
● Validation pour la sécurité et validation pour l'intégrité
● les données entrantes doit être validée pour des raisons de
sécurité
● Balisage malin dans le contenu soumis
● Injection d'SQL
● l'intégrité du modèle de domaine doit être assurée
● un courriel doit être (syntaxiquement) valide
● Les numéros de carte de crédit ne doit comporter que des chiffres
34. Mehdi Guermazi
À la découverte de FLOW 3
Validation dans FLOW3
● vous ne voulez pas coder des validations dans vos
contrôleurs
● FLOW3 sépare la validation des préoccupations de votre
contrôleur
● pas de code PHP nécessaire pour la validation
● déclaré à travers les annotations
● Exemple
@FLOW3Validate(type="StringLength", options={ "minimum"=1, "maximum"=5 })
35. Mehdi Guermazi
À la découverte de FLOW 3
Les validateurs
● Les validateurs fournis par FLOW3 peuvent être appelés par leur
alias
● Count, Float, NotEmpty, RegularExpression, Uuid, DateTime,
NumberRange, StringLength, Alphanumeric, Integer, Number, String,
EmailAddress, Label, Raw, Text
● Les validateurs personnalisés doivent implémenter le
« ValidatorInterface »
36. Mehdi Guermazi
À la découverte de FLOW 3
Mise à jour automatique de la bd
● lors du premier démarrage de FLOW3 la structure de la
bd sera créé
● quand un modèle change, la structure est mise à jour
● Il faut être prudent avec les données existantes, les mise
à jour peuvent effacer des données.
● pour l'environnement de production, vous devez gérer
manuellement les modifications de structure
37. Mehdi Guermazi
À la découverte de FLOW 3
Support par ligne de commande
● Permettre aux administrateurs de l'application de la gérer
facilement pour le déploiement et pour d'autres actions
comme la création d'utilisateur par exemple.
● Permettre de créer vos propres actions en ligne de
commande.
38. Mehdi Guermazi
À la découverte de FLOW 3
Sécurité
● Sécurité accrue par défaut
● la sécurité est centralisée (AOP)
● calquée sur l'expérience du projet TYPO3 et Spring
Security (framework Java)
● assure l'authentification, l'autorisation, la validation, le
filtrage ...
● extensible pour une nouvelle authentification ou des
mécanismes d'autorisation
39. Mehdi Guermazi
À la découverte de FLOW 3
Programmation Orientée Aspect - AOP
● Paradigme de programmation
● POO pour conception par objets
● AOP conception transversale sur les aspects
● Avec FLOW3, il est facile (et possible) d'utiliser l'AOP en
PHP
40. Mehdi Guermazi
À la découverte de FLOW 3
Merci
● Les diapositives http://tinyurl.com/brogs4w
● Me suivre sur twitter @DjBouZz
● Me contacter mguermazi@infoglobe.ca
● Joindre Robert Lemke robert@typo3.org
● Suivre Robert Lemke @t3rob