Lightning Talks
Rules
6 conférences
5 minutes par conférences
30 secondes de pause
Spoiler Alert
Restez jusqu'à la fin
une surprise vous attend...
Diversify our PHP community: My story
Michelle Sanver
Commander une application au clavier
Richard Hanna
@richardhanna
développeur
@PodcastEcho
Chatbot ?
Routing ?
/** @var RouterInterface $router */ $router->getRouteCollection()->all();
admin_user_list ➡ User list
admin_user_create ➡ User create
admin_generate_invoice_for_order ➡ Generate invoice for Order
Humaniser les noms des routes
# Routing admin_user_list: path: /user/list/{user} admin_user_create: path: /user/create/{user} admin_user_update: path: /user/update/{user}
# humanized_routes.en.yml admin_user_list: User List admin_user_create: User Create admin_user_update: User Update
# humanized_routes.fr.yml admin_user_list: Utilisateur Lister admin_user_create: Utilisateur Créer admin_user_update: Utilisateur Modifier
Traduction des noms des routes
Démo
Routes avec des paramètres ?
admin_user_update: path: /user/update/{user} methods: [GET] requirements: user: \d+ ⚠️ defaults: { _controller: AdminBundle:User:update }
User update_
➡ User update Korben DALLAS
➡ User update Leeloo Ekbat De Sebat
➡ User update Cornelius
Récupérer les metadata du controller d'une route
public function resolve(string $className, string $paramName): array
{
/** @var Doctrine\Common\Persistence\ManagerRegistry $managerRegistry */
$entityManager = $this->managerRegistry->getManagerForClass($className);
if (null === $entityManager) {
return [];
}
$objects = $entityManager->getRepository($className)->findAll();
$resultViews = [];
foreach ($objects as $object) {
$resultViews[] = new ResultView(
$object,
$this->router->generate($routeName, [$paramName => $object->getId()])
);
}
return $resultViews;
}
User::__toString()
Resolver générique pour les entités Doctrine
Démo avec paramètres
Web Speech API / Speech Recognition ?
La randonnée à vélo
Thomas Jarrand
Sécurité et cookies
Ulrich Lusseau @moncode
crédit photo: lacuisinedebernard.com
<?php
setcookie('user_id', 10, 0, '/', 'forumphp2018.dev');
?>
Hello!
<script>
alert(document.cookie);
</script>
Oups!
Protection XSS
<?php
setcookie('user_id', 10, 0, '/', 'forumphp2018.dev', false, true );
HTTPS
<?php
setcookie('user_id', 10, 0, '/', 'forumphp2018.dev', true , true );
Préfixe __Secure-
<?php
setcookie('__Secure-user_id', 10, 0, '/', 'forumphp2018.dev', true);
Le flag secure doit être à true, sinon le cookie est ignoré par le navigateur.
Préfixe __Host-
<?php
setcookie('__Host-user_id', 10, 0, '/', '', true);
Le flag secure doit être à true et le domain doit être vide, sinon le cookie est ignoré par le navigateur.
Option SameSite
Limite les attaques CSRF
2 options:
strict: n'envoie jamais le cookie
lax: envoie le cookie si la requête HTTP est de type GET
Indique au navigateur de ne pas envoyer le cookie si la requête source provient d'un autre site
Option SameSite
<?php
setcookie(
'__Secure-user_id',
10,
[
'expires' => 0,
'path' => '/',
'domain' => 'forumphp2018.dev',
'secure' => true,
'httponly' => true,
'samesite' => 'lax'
]
);
<?php
header('Set-Cookie: __Secure-user_id=10; Path=/; Secure; httponly; Samesite=lax');
7.3
@FredBouchery
©Disney
Apéro communautaire
Rendez vous au café oz
(3 Place Denfert-Rochereau)
5 minutes à pied sur la gauche en sortant
à partir de 19h30
Le premier verre et le snack est offert par l'AFUP et Darkmira
Apéro communautaire
Darkmira organise un quizz à 20h
pour gagner au voyage pour le
Darkmira Tour Brasil en juin 2019!!
Quizz Darkmira
https://quizz.darkmira.fr/sessions/48486
LT Forum PHP 2018
By metalmumu
LT Forum PHP 2018
shared presentation for lightning talk session of Forum PHP 2017 Paris
- 507