Archives de
Auteur : Dayo

Développeur depuis 2008, j’écris pour me souvenir et explorer de nouveau horizons.
PhpStorm 2020.2 et Docker

PhpStorm 2020.2 et Docker

Si vous utilisez Docker et PhpStorm, il n’était jusque-là pas facile de les utiliser ensemble. Depuis la mise à jour 2020.2 il est simple de les utiliser conjointement. Dans la configuration de Docker il suffit de cocher « Docker for Windows » :

PhpStorm 2020.1
PhpStorm 2020.2

Il est alors possible de se connecter au service Docker via l’onglet « Services »

Il est aussi possible de configurer un interpréteur PHP depuis le conteneur :

Et voilà, PhpStorm et Docker fonctionnent enfin main dans la main.

Publier une librairie sur packagist

Publier une librairie sur packagist

En PHP le gestionnaire de dépendance le plus utiliser est composer. Composer utilise par défaut packagist.org pour chercher une librairie. Nous allons voir comment ajouter une librairie sur packagist afin de la rendre disponible au plus grand nombre.

Création de la librairie

Nous allons donc commencer par créer notre librairie dans un dossier avec un composer init, il nous sera alors demandé les informations suivantes :

  • nom du projet, celui utiliser lors du require
  • auteur
  • stabilité minimum
  • type de projet
  • licence
  • définition des dépendances
  • définition des dépendances de développement

Dans mon cas voilà ce que ça donne :

{
    "name": "dayofr/sfdc-rest-client",
    "description": "A SalesForce REST API PHP Wrapper",
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "Dayo Fr",
            "email": "dayo@dayo.fr"
        }
    ],
    "require": {}
}

Nous créons ensuite un dossier src et tests afin de pouvoir définir les sections autoload et autoload-dev. Grace a ces définition nous pourrons utiliser les namespace PHP. Dans le code ci-dessous nous disons que les fichier situé dans le dossier src on pour namespace Dayofr :

"autoload": {
    "psr-4": {
      "Dayofr\\": "src/"
    }
  },
"autoload-dev": {
    "psr-4": {
      "Dayofr\\Tests\\": "tests/"
    }
  }

Les fichier PHP à la racine de src pourrons alors déclarer le namespace suivant :

<?php declare(strict_types=1);

namespace Dayofr;

Dans le cas où nous avons des sous dossiers sous la forme src/Responses/Limits le namespace serais alors :

<?php declare(strict_types=1);

namespace Dayofr\Responses\Limits;

Il en va de même pour les tests :

<?php

namespace Dayofr\Tests\Authentication;

Notre code peux donc est utiliser par l’autoloader de composer via :

use Dayofr\Authentication\LoginData;

Test en local

Afin de tester que tout fonctionne, vous pouvez créer un autre projet et ajouter une dépendance vers la libraire. Il nous faut rajouter un repository de type path. Pour cela modifier le composer.json de votre projet de test d’une des deux façon ci-dessous:

avec un lien symbolique :

"repositories": [
    {
        "type": "path",
        "url": "../sfdc-rest-client/",
    }
],

où en copiant le fichiers:

"repositories": [
    {
        "type": "path",
        "url": "../sfdc-rest-client/",
        "options": {
            "symlink": false
        }
    }
],

Il ne nous reste plus qu’a faire un

composer require dayofr/sfdc-rest-client:dev-master

Nous avons ici notre librairie copiée dans le dossier vendor. Vous pouvez alors utiliser votre librairie.

Déployer sur packagist

Pour ceci il vous faudra déployer votre code sur GitHub. Une fois fait, direction packagist.org. Premier étape, la connexion avec GitHub:

Ensuite direction la page d’ajout de librairie dans laquelle vous mettez l’url de projet sur GitHub:

Une fois envoyé, vous êtes redirigé vers la page de votre librairie, ou on vous dit que votre libraire va bientôt être ajouté.

Une fois ajouter vous avez plus d’information sur la page:

Suivez le lien en haut de la page pour activer le hook GitHub afin d’avoir la librairie à jour sur packagist.

Si vous voulez faire une version de votre librairie il vous suffit de créer un tag dans git et la version apparaitra dans packagist.

Votre libraire est prête à être utiliser par le monde entier 🙂

Pour en savoir plus sur packagist direction la page about.

Code Climate pour PHP

Code Climate pour PHP

Peu de temps après mon article sur Codecov, j’ai vu Codeclimate. En de fournir la couverture de code, Codeclimate donne aussi des information sur la qualité du code.

Première étape, la création d’un compte avec github en cliquant sur « Login » puis « Quality ».

Une fois connecté cliquez sur « Open source » puis sur « Add a repository ».

Dans la liste cliquez sur « Add Repo » pour en face de votre projet.

Lors de votre prochain build, vous aurez alors accès a des informations sur la qualité de votre code.

Dans mon cas, pour le moment tout va bien 🙂 Mais on peut voir qu’il manque la couverture de code.

Il nous faut pour cela rajouter un secret dans Travis CI. Pour le trouver direction « Repo Settings » => « Test coverage » => Copiez le « test reporter id »

Dans Travis CI ajoutez le dans la section « Settings ».

Et lors de votre prochain build vous aurez la couverture de code dans la section « Overview »

Dans la section « Issues » vous trouverez la liste des problèmes détecté par Code Climate. Vous pouvez alors les corriger, ou bien choisir un des options afin de ne plus le voir.

Dans la section « Code » vous trouverez des informations fichier par fichier.

En sélectionnant un fichier vous aurez plus détails sur celui-ci

Notamment la couverture de code.

Et voilà, il ne vous reste qu’a regardez tous ça.

GitHub, Travis CI et Codecov pour PHP

GitHub, Travis CI et Codecov pour PHP

GitHub

Première étape la création d’un compte GitHub.

Ensuite il faut créer un nouveau repository.

Il faut choisir un nom, une description, si le projet est publique ou priver, si on veux un fichier README ainsi qu’une licence et un fichier .gitignore.

Une fois fait direction la ligne de commande pour utiliser git.

Dans un dossier vide faites la première commande, puis votre travail et la 2eme et 3eme commande afin de commiter vos fichier. Quand vous être prêt a pousser votre projet sur GitHub faites les 2 dernières.

git init
git add .
git commit -m "first commit"
git remote add origin git@github.com:dayofr/sfdc-rest-client1.git
git push -u origin master

Dans mon cas, sur GitHub on peut voir:

Travis CI

Première étape, la création du fichier .travis.yml. C’est ce fichier qui sera utilisé par Travis CI pour exécuter ce que vous lui demanderait.

Dans notre cas, on demande un machine pour PHP version 7.4, il est possible de demander plusieurs machine en rajoutant des valeur a la liste.

La partie script contient les commandes exécutés par travis, dans notre cas nous copions un fichier, installons les dépendance avec composer puis lançons les test avec phpunit. Il faut bien sur commiter et pousser ce fichier sur GitHub.

language: php
php:
  - '7.4'

script:
  - cp .env.example .env
  - composer install
  - vendor/bin/phpunit

Direction Travis CI pour la configuration. Une fois connecté avec GitHub, cliquez sur le menu en haut a droite et sur « Settings ».

Dans la liste des projets sélectionnez celui sur lequel vous travaillez.

Cliquez alors sur le nom de votre projet et vous devriez voir:

Il vous faut alors pousser du code sur GitHub pour que le travail soit effectué. Un nouveau travail devrais alors être démarré par Travis CI et vous devriez voir:

Nous avons la sortie console du travail fait par Travis CI.

Codecov

Pour avoir accès à la couverture de code, nous utilisons Codecov. Une fois connecté avec GitHub, cliquez sur le bouton « Add new repository » puis le projet que vous souhaitez ajouter.

La page suivante nous explique qu’il n’est pas obligatoire de rajouter une variable d’environnement pour Travis CI mais il m’a fallut le faire. Direction Travis CI afin de rajouter cette variable. Cliquez sur « Settings ».

Un peu plus bas dans la page vous trouverez une section « Environment Variables », ajoutez alors la variable.

L’étape suivante consiste a modifier le fichier .travis.yml pour lui rajouter les information de couverture de code et l’appel a Codecov.

  - vendor/bin/phpunit --coverage-clover=coverage.xml

after_success:
  # Submit coverage report to https://codecov.io
  - bash <(curl -s https://codecov.io/bash)

Lors du prochain travail de Travis CI vous aurez alors dans Codecov des informations.

Et voila, a chaque fois que vous pousserais du code sur GitHub, vous aurez un job Travis CI avec vos tests et la couverture de code avec Codecov.

Symfony make:user, auth, registration-form et reset-password

Symfony make:user, auth, registration-form et reset-password

Afin de mettre en place une authentification dans notre application Symfony nous allons utiliser le makerbundle.

Pour aller vite voici la liste des commandes utilisées au long de cet article. Vous pouvez les exécuter et vous laissez guider :

composer require symfonycasts/reset-password-bundle
php bin/console make:user
php bin/console make:auth
php bin/console make:registration-form
php bin/console make:reset-password

Nous commençons par ajouter symfocasts/reset-password-bundle dont nous aurons besoin plus tard.

Nous exécutons php bin/console make:user et suivons le guide:

Nous nous retrouvons donc avec notre entité User et un fichier security.yml mis a jour. Étape suivante, la page de connexion. Pour cela nous exécutons: php bin/console make:auth

Encore une fois le fichier security.yml est mis a jour. Nous avons cette fois un contrecoller et un template, c’est basique mais fonctionnel, c’est maintenant un bout de code de votre projet, a vous le faire vivre et de le modifier.

Avant d’aller plus loin ouvrez le fichier LoginFormAuthenticator direction la méthode onAuthenticationSuccess puis mettez a jour la redirection par défaut lors d’une connexion:

public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
    {
        if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
            return new RedirectResponse($targetPath);
        }

        // For example : return new RedirectResponse($this->urlGenerator->generate('some_route'));
        throw new \Exception('TODO: provide a valid redirect inside '.__FILE__);
    }

Il est bien beau de pouvoir se connecter encore faudrat-il pouvoir s’enregistrer. Nous exécutons donc php bin/console make:registration-form

Cette fois nous avons tout ce qu’il faut pour s’enregistrer:

Dernière étape, le récupération de mots de passe, encore une fois nous exécutons php bin/console make:reset-password

Et voila, grâce a ces 4 commandes vous avez:

  • une entité User
  • une page de connexion
  • une page d’enregistrement
  • une page de récupération de mot de passe

Tous les fichiers générés sont les vôtre et peuvent/doivent être modifiés en fonction de vos besoins.