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

  • 447