Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
L’arrivée de PHP 5.3 en milieu d’année 2009 a bouleversé la manière de développer des applications web. En effet, cette nouvelle version a apporté de nouveaux outils au langage tels que les espaces de nommage qui favorisent la réutilisabilité du code lorsqu’ils sont employés à bon escient. Les nouveaux frameworks de développement rapide ont aussi suivi le mouvement et reposent sur la base de PHP 5.3. C’est le cas de Symfony2 dont la version stable est prévue prochainement.
Cette présentation offre un tour d’horizon de la nouvelle architecture du framework qui s’articule autour de “bundles”, de librairies externes et de nombreux composants indépendants tels que le conteneur d’injection de dépendances. Nous dresserons un panorama des principales fonctionnalités offertes par le framework telles que la couche d’ORM Doctrine 2, le moteur de templating Twig et la gestion des formulaires. Nous nous intéresserons également à la gestion du cache HTTP, à la couche de sécurité ainsi qu’aux outils de débogage destinés à améliorer la productivité du développeur et la maintenance de l’application.
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
L’arrivée de PHP 5.3 en milieu d’année 2009 a bouleversé la manière de développer des applications web. En effet, cette nouvelle version a apporté de nouveaux outils au langage tels que les espaces de nommage qui favorisent la réutilisabilité du code lorsqu’ils sont employés à bon escient. Les nouveaux frameworks de développement rapide ont aussi suivi le mouvement et reposent sur la base de PHP 5.3. C’est le cas de Symfony2 dont la version stable est prévue prochainement.
Cette présentation offre un tour d’horizon de la nouvelle architecture du framework qui s’articule autour de “bundles”, de librairies externes et de nombreux composants indépendants tels que le conteneur d’injection de dépendances. Nous dresserons un panorama des principales fonctionnalités offertes par le framework telles que la couche d’ORM Doctrine 2, le moteur de templating Twig et la gestion des formulaires. Nous nous intéresserons également à la gestion du cache HTTP, à la couche de sécurité ainsi qu’aux outils de débogage destinés à améliorer la productivité du développeur et la maintenance de l’application.
Clear PHP est la référence de programmation PHP pour tous. Elle rassemble la plus grande list de recommendations pour écrire du code clair, éviter les erreurs classiques, prévenir le code mort et préparer les prochaines versions de la plate-forme. Ces recommendations se concentrent sur PHP, et se situent entre les conventions d'écriture et la conception logicielle. C'est la première fois qu'une telle référence a été compilée, pour permettre à tous de bâtir son propre référentiel de programmation en PHP.
Comment créer un site de membre, vol 03, inscription du membre dans l'auto-répondeur, inscription pour identifications futures dans le sites avec validation de son compte par email
Dans cet article, vous allez voir comment créer facilement une barre de progression en temps réel grâce aux nouvelles variables de session ajoutées à PHP 5.4
- https://github.com/pH-7/PHP5.4-Session-Upload-Progress-Bar
- http://ph7.me
- https://www.php.net/manual/fr/session.upload-progress.php
Dans cet article, vous allez voir comment protéger votre site en utilisant la technique du "Pot de Miel".
- https://github.com/pH-7/
- https://github.com/pH-7/Honeypots
- http://ph7.me
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsVladyslav Riabchenko
SOLID est un acronyme représentant cinq principes de bases de la programmation orientée objet permettant le développement de logiciels fiables, évolutifs et robustes. Le framework Symfony est un excellent support pour illustrer chacun de ces principes. Nous verrons ainsi que SOLID est à l’origine de sa flexibilité, sa fiabilité mais aussi de sa maintenabilité et son évolutivité. Nous verrons également comment appliquer ces principes pour améliorer son code métier et perfectionner l’architecture de son application.
Void-safe augmente la stabilité et la fiabilité du logiciel tout en diminuant le travail pour le développeur ! Une opération totalement gagnante.
Le langage de programmation Eiffel offre une excellente mise en œuvre du Void-safe mais certains des principes présentés ici s'appliquent à tous les langages.
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
Une introduction / ébauche au langage PHP (Manipulation des formulaires, sessions et cookies) faite dans le cadre des formations inter-membres du club Junior ENSI (http://www.junior-ensi.org/) de l'école nationale des sciences de l'informatique (http://www.ensi.rnu.tn/).
Qui a laissé son mot de passe dans le codeDamien Seguy
Qui, de nos jours, laisse encore son mot de passe dans le code? Pour quelles raisons? Et comment éviter de voir ses secrets atterrir en production, ou dans un dépot public? en utilisant Exakat et git-secrets.
Php 2 - Approfondissement MySQL, PDO et MVCPierre Faure
Introduction au langage de programmation PHP.
Présentation réalisée la première fois le lundi 10 mars 2014 à l'IIM : Institut de l'Internet et du Multimédia pour les années préparatoires.
Cette présentation a pour but d'approfondir les compétences PHP des élèves : utiliser des bases de données, comprendre PDO et le modèle MVC (basique).
Après présentation orale de ces slides, des exercices de mise en pratique ont été réalisés en Atelier avec les élèves.
L'exercice principal était de construire une plateforme similaire à twitter selon un modèle MVC.
Voici le plan de la présentation :
• Les bases de données : MySQL
- Principe
- phpMyAdmin
- Interagir avec une BDD
• Les fonctions
- La machine à carottes
- Exemple avec MySQL
- Les fonctions PHP
• Modèle Vue Contrôleur - MVC
- Principe
- Mise en pratique
• Quelques trucs à savoir a.$_FILES et $_POST
- $_SESSION
- L’indentation
- PHP + HTML = ?
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
Une introduction / ébauche au langage PHP (intro, xampp, premier pas, les structures, les variables, les types, les fonctions ...) faite dans le cadre des formations inter-membres du club Junior ENSI (http://www.junior-ensi.org/) de l'école nationale des sciences de l'informatique (http://www.ensi.rnu.tn/).
To be Agile or not to be ? Les méthodologies de développement doivent s'adapter aux demandes de plus en plus spécifiques et changeantes tout en respectant les besoins pratiques du client.
Chez TheCodingMachine, on pense que chaque projet mérite un instant de réflexion pour adopter la bonne approche méthodologique ! Pour certains types de projets ou bien certains contextes clients, la methode agile est très bien adaptée. Dans d’autres situations, c’est naturellement moins le cas et il est préférable d'employer les méthodes classiques.
Zoom sur les meilleures méthodologies de développement web et informatique (methode agile et methode classique de développement.)
Clear PHP est la référence de programmation PHP pour tous. Elle rassemble la plus grande list de recommendations pour écrire du code clair, éviter les erreurs classiques, prévenir le code mort et préparer les prochaines versions de la plate-forme. Ces recommendations se concentrent sur PHP, et se situent entre les conventions d'écriture et la conception logicielle. C'est la première fois qu'une telle référence a été compilée, pour permettre à tous de bâtir son propre référentiel de programmation en PHP.
Comment créer un site de membre, vol 03, inscription du membre dans l'auto-répondeur, inscription pour identifications futures dans le sites avec validation de son compte par email
Dans cet article, vous allez voir comment créer facilement une barre de progression en temps réel grâce aux nouvelles variables de session ajoutées à PHP 5.4
- https://github.com/pH-7/PHP5.4-Session-Upload-Progress-Bar
- http://ph7.me
- https://www.php.net/manual/fr/session.upload-progress.php
Dans cet article, vous allez voir comment protéger votre site en utilisant la technique du "Pot de Miel".
- https://github.com/pH-7/
- https://github.com/pH-7/Honeypots
- http://ph7.me
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsVladyslav Riabchenko
SOLID est un acronyme représentant cinq principes de bases de la programmation orientée objet permettant le développement de logiciels fiables, évolutifs et robustes. Le framework Symfony est un excellent support pour illustrer chacun de ces principes. Nous verrons ainsi que SOLID est à l’origine de sa flexibilité, sa fiabilité mais aussi de sa maintenabilité et son évolutivité. Nous verrons également comment appliquer ces principes pour améliorer son code métier et perfectionner l’architecture de son application.
Void-safe augmente la stabilité et la fiabilité du logiciel tout en diminuant le travail pour le développeur ! Une opération totalement gagnante.
Le langage de programmation Eiffel offre une excellente mise en œuvre du Void-safe mais certains des principes présentés ici s'appliquent à tous les langages.
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
Une introduction / ébauche au langage PHP (Manipulation des formulaires, sessions et cookies) faite dans le cadre des formations inter-membres du club Junior ENSI (http://www.junior-ensi.org/) de l'école nationale des sciences de l'informatique (http://www.ensi.rnu.tn/).
Qui a laissé son mot de passe dans le codeDamien Seguy
Qui, de nos jours, laisse encore son mot de passe dans le code? Pour quelles raisons? Et comment éviter de voir ses secrets atterrir en production, ou dans un dépot public? en utilisant Exakat et git-secrets.
Php 2 - Approfondissement MySQL, PDO et MVCPierre Faure
Introduction au langage de programmation PHP.
Présentation réalisée la première fois le lundi 10 mars 2014 à l'IIM : Institut de l'Internet et du Multimédia pour les années préparatoires.
Cette présentation a pour but d'approfondir les compétences PHP des élèves : utiliser des bases de données, comprendre PDO et le modèle MVC (basique).
Après présentation orale de ces slides, des exercices de mise en pratique ont été réalisés en Atelier avec les élèves.
L'exercice principal était de construire une plateforme similaire à twitter selon un modèle MVC.
Voici le plan de la présentation :
• Les bases de données : MySQL
- Principe
- phpMyAdmin
- Interagir avec une BDD
• Les fonctions
- La machine à carottes
- Exemple avec MySQL
- Les fonctions PHP
• Modèle Vue Contrôleur - MVC
- Principe
- Mise en pratique
• Quelques trucs à savoir a.$_FILES et $_POST
- $_SESSION
- L’indentation
- PHP + HTML = ?
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
Une introduction / ébauche au langage PHP (intro, xampp, premier pas, les structures, les variables, les types, les fonctions ...) faite dans le cadre des formations inter-membres du club Junior ENSI (http://www.junior-ensi.org/) de l'école nationale des sciences de l'informatique (http://www.ensi.rnu.tn/).
To be Agile or not to be ? Les méthodologies de développement doivent s'adapter aux demandes de plus en plus spécifiques et changeantes tout en respectant les besoins pratiques du client.
Chez TheCodingMachine, on pense que chaque projet mérite un instant de réflexion pour adopter la bonne approche méthodologique ! Pour certains types de projets ou bien certains contextes clients, la methode agile est très bien adaptée. Dans d’autres situations, c’est naturellement moins le cas et il est préférable d'employer les méthodes classiques.
Zoom sur les meilleures méthodologies de développement web et informatique (methode agile et methode classique de développement.)
Eim360 Dématérialisation et Archivage électroniqueSollan France
Présentation en ligne du déjeuner-débat EIM360 organisé par Sollan sur le thème : "Dématérialisation et Archivage électronique : un duo incontournable ?". Avec les éditeurs Cecurity.com, Everteam, Generix Group et Kofax.
Request for Proposal (RFP) management - Ask the right questions and choose wi...Harold van Heeringen
Request for Proposal (RFP) management - Ask the right questions and choose wisely. Presented at the Software Measurement European Forum 2010 (Rome, June 2010)
Lionel Barzon III: Four Digital Skills For Your CareerLionel Barzon III
With an increasingly digital world surrounding us, it's important to not buck the trend. Learning new skills like these can not only benefit you while you're in school, but increase your career opportunities after you graduate.
Une immense majorité de développeurs connaissent jQuery, mais pas vraiment JavaScript. Nous verrons comment faire en pur JS ce que vous avez l’habitude de faire avec jQuery et jQuery UI, en mettant l’accent sur le support par les navigateurs des fonctionnalités JS utilisées, et sur les polyfills disponibles.
Moving from a company where everything ran on 'bare metal' in a Datacenter to a startup where everything was already running in AWS has proven to be an interesting learning curve. This talk takes you through some of my learnings along the way and some of the ways we use bits of the AWS toolkit now at Tido.
Clarkie, CTO @ Tido
https://twitter.com/clarkieclarkie
https://twitter.com/tidomusic
La sécurité informatique expliquée aux salariésNRC
Besoin de sensibiliser vos salariés à la cybersécurité dans votre entreprise afin de limiter les risques d'infection de vos systèmes informatiques ? F-Secure vous donne toutes les clés ! Suivez le guide !
Et rendez-vous sur notre page F-Secure sur : http://www.nrc.fr/f-secure-antivirus/
Ce cours présente la notion d'héritage entre classes qui permet de construire une relation de type "is-a". On crée une sous-classe à partir d'une super-classe, pour en hériter une partie de ses membres. On peut ensuite y ajouter des membres spécifiques. Ce cours présente également la redéfinition de méthodes, et comment utiliser les modificateurs de visibilité des membres.
L'ORM Doctrine offre beaucoup plus de flexibilité qu'il n'y paraît. Dans cette présentation, nous allons nous intéresser à son fonctionnement interne et à ses fonctionnalités moins connues, pour découvrir comment mieux l'utiliser. Au programme, évènements et listeners, filtres, tracking policy, mais aussi des astuces sur des architectures possibles pour son code...
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
Toute application Web dite dynamique nécessite une base de données ainsi que des outils qui permettront de manipuler ces données.
Dans la palette des outils à la disposition des développeurs PHP, on trouve entre autres les DBAL (DataBase Abstraction Layer ou couche d'abstraction de base de données) ou les ORM (Object Relational Mapping ou mapping objet-relationnel).
Similaire à Formulaires Symfony2 - Cas pratiques et explications (8)
2. 2/51
Plan
● Pré-requis
– Avoir lu la documentation des formulaires
● 4 cas pratiques
– Un formulaire de login
– Changer de mot de passe (ancien/nouveau)
– Traductions avec Doctrine
– Masquer les champs pour certains utilisateurs
● Explications à chaque cas
3. 3/51
Cas n°1 – Formulaire de login
« Le formulaire de connexion n'utilise pas le
composant Form, ce qui nous oblige à dupliquer
le HTML. Il faut utiliser le composant Form »
4. 4/51
Requis par la couche de sécurité
● POST /login-check
_username
_password
_csrf_token (intention : authenticate)
$this->get('form.csrf_provider')->generateCsrfToken('authenticate')
_remember_me
5. 5/51
Login – Le formulaire
class LoginType extends AbstractType
{
public function buildForm($builder, $options)
{
$builder
->add('_username', 'text')
->add('_password', 'password')
->add('_remember_me', 'checkbox')
->add('submit', 'submit'); // new!
}
public function setDefaultOptions($resolver)
{
$resolver->setDefaults(array(
'csrf_field_name' => '_csrf_token',
'intention' => 'authenticate',
));
}
public function getName() { return 'login'; }
}
6. 6/51
Le conteneur de services
<service id="form.type.login" class="BacklogFormTypeLoginType">
<tag name="form.type" alias="login" />
</service>
13. 13/51
Cas n°1 - Conclusion
● Construction d'un formulaire
● Paramétrage du CSRF (nom de champ + intention)
● Flexibilité grâce à la FormFactory
● Réutilisation des templates
14. 14/51
Cas n°2 – Changement de MDP
« Je veux que l'utilisateur saisisse son ancien
mot de passe pour en mettre un nouveau »
15. 15/51
Cycle de vie du formulaire
Construction
FormBuilder
Utilisation
Form
Soumission
$form->bind
Listeners
Modifiable
Lecture
seulement
Lecture
seulement
Attributs & Options
Modifiable
Lecture
seulement
Lecture
seulement
(Data|View)
Transformers
Modifiable
Lecture
seulement
Lecture
seulement
Enfants / Parents
Modifiable Modifiable
Lecture
seulement
16. 16/51
ProfileType
class ProfileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array
$options)
{
$builder
->add('fullname', 'text')
->add('initials', 'text')
->add('change_password', 'change_password', array(
'virtual' => true
))
->add('submit', 'submit')
;
}
public function getName()
{
return 'profile';
}
}
18. 18/51
change_password
● Data = user
● Injection du service d'encodage
● À la soumission du formulaire
– Vérifie le mot de passe
– Ajoute un message d'erreur si le MDP est incorrect
– Enregistre le nouveau mot de passe
19. 19/51
Le formulaire
class ChangePasswordType extends AbstractType
{
// ...
public function buildForm(FormBuilderInterface $builder, array
$options)
{
// ...
$builder->addEventListener(FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($encoderFactory) {
...
});
20. 20/51
Le formulaire
function (FormEvent $event) use ($encoderFactory) {
$form = $event->getForm();
$user = $form->getData();
$encoder = $encoderFactory->getEncoder($user);
$oldPassword = $form->get('old_password')->getData();
$newPassword = $form->get('new_password')->getData();
if (!$oldPassword || !$newPassword) {
return;
}
if (!$user->isPasswordValid($oldPassword, $encoder)) {
$form->addError(new FormError('Bad credentials'));
return;
}
$user->setPassword($newPassword, $encoder);
}
21. 21/51
Déclaration du form type
<service id="form.type.change_password" class="...">
<argument type="service" id="security.encoder_factory" />
<tag name="form.type" alias="change_password" />
</service>
22. 22/51
Cas n°2 - Conclusion
● Le cycle de vie d'un formulaire
● Le rôle des FormType
● Les listeners pour interagir après la construction
● virtual = true
– Partage la donnée avec le sous-formulaire
● mapped = false
– Permet de « hooker » dans un FormType
23. 23/51
Cas n°3 – Traductions & Doctrine
« Je veux gérer mes traductions
en Javascript de manière homogène »
24. 24/51
Le contrat
● Contrôleur intact
● Modèle de données explicite (oneToMany)
● Mise en commun au niveau des formulaires
27. 27/51
Le contrat – le contrôleur
public function editAction(Request $request, $id)
{
$product = ...;
$form = $this->createForm('product', $product);
if ($request->isMethod('POST') &&
$form->bind($request)->isValid()
) {
// save and flush
}
return $this->render(...);
}
28. 28/51
Le contrat – l'API commune
$product->getUpc();
$product->setUpc($upc);
$product->getTranslations();
$trans = $product->getTranslation('fr_FR');
$trans->getTitle();
$trans->setTitle('Product title');
$trans->getBaseline();
$trans->setBaseline('Baseline of the product');
$product->removeTranslation($trans);
$product->addTranslation(new ProductTranslation(...));
29. 29/51
Le formulaire
class TranslationsType extends AbstractType
{
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'allow_add' => true,
'allow_delete' => true,
'prototype' => true,
'by_reference' => false
));
}
public function getParent()
{
return 'collection';
}
public function getName()
{
return 'translations';
}
}
30. 30/51
Le formulaire
class TranslationsType extends AbstractType
{
public function __construct($defaultCulture, array $availableCultures =
array())
{
$this->availableCultures = $availableCultures;
$this->defaultCulture = $defaultCulture;
}
public function buildView(FormView $view, FormInterface $form, array
$options)
{
$cultures = $this->availableCultures;
$existing = array_keys($form->all());
$view->vars['missing_cultures'] = array_diff($cultures,
$existing);
$view->vars['default_culture'] = $this->defaultCulture;
}
}
32. 32/51
Templating
E-mail : alexandre@...
Prénom : Salomé
Nom : Alexandre
Cet e-mail est déjà utilisé
Il est interdit d'utiliser le domaine « @... »
LABEL WIDGET
LABEL WIDGET
LABEL WIDGET
ERRORS
33. 33/51
Templating
E-mail : alexandre@...
Prénom : Salomé
Nom : Alexandre
Cet e-mail est déjà utilisé
Il est interdit d'utiliser le domaine « @... »
LABEL WIDGET
LABEL WIDGET
LABEL WIDGET
ERRORS
ROW
35. 35/51
form_div_layout.html.twig
{% block ..._widget %}
{% block ..._label %}
{% block ..._errors %}
{% block ..._row %}
{% block birthday_row %}
{% block date_row %}
{% block form_row %}
Au moment du rendu, le moteur cherche un bloc dans le template
correspondant au type ou au parent le plus proche. Par exemple
pour le type « birthday » :
Ce fichier comporte les blocs utilisés pour le rendu des formulaires. Les
plus fréquents sont les suivants :
50. 50/51
Cas n°4 - Conclusion
● Implémentation simple et utilisation rapide
● Utiliser les options pour configurer
– is_granted / is_granted_subject
– data_as_subject