Formation PUB030 : Laravel, 2019 Les façades

33.3 Examiner le code d'une façade


Lorsque vous utilisez une façade, il est parfois utile de consulter le code de cette façade afin de bien comprendre le travail réalisé par cette façade.

Par exemple, si vous essayez d'authentifier un usager et que l'authentification échoue toujours, même lorsque vous êtes certains des informations entrées, vous voudrez savoir ce que Laravel fait vraiment lorsque vous entrez l'instruction :

Contrôleur Laravel (PHP)

$reussite = Auth::attempt(['name' => 'toto', 'password' => 'tata']);

Pour y parvenir :

  • Ouvrez le fichier config\app.php et retrouvez le nom de la façade dans la section 'aliases'.
    Fichier config\app.php

    ...

    'aliases' => [

        ...

        'Auth' => Illuminate\Support\Facades\Auth::class,

        ...

    ],

    ...

  • Ouvrez le fichier auquel réfère la façade (ici : Illuminate\Support\Facades\Auth.php). Suggestion : utilisez le raccourci-clavier Ctrl+Maj+N dans PhpStorm pour y arriver rapidement ou faites Ctrl+Click sur Auth dans le code. Ce fichier contient une classe avec la méthode statique getFacadeAccessor(). La chaîne que cette méthode retourne correspond au nom du service auquel la façade est associée (ici : auth).
    Fichier Illuminate\Support\Facades\Auth.php

    /**
    * ...
    *
    * @see \Illuminate\Auth\AuthManager
    * @see \Illuminate\Contracts\Auth\Factory
    * @see \Illuminate\Contracts\Auth\Guard
    * @see \Illuminate\Contracts\Auth\StatefulGuard
    */

    class Auth extends Facade

    {

        /**

         * Get the registered name of the component.

         *

         * @return string

         */

        protected static function getFacadeAccessor()

        {

            return 'auth';

        }

        ...

    }

  • Une fois que vous connaissez le nom du service associé à la façade, vous savez que les deux extraits de code suivants sont équivalents :
    Contrôleur Laravel (PHP)

    public function authentifier() : bool

    {

        $reussite = Auth::attempt(['name' => 'toto', 'password' => 'tata']);

        ...

    }

    et

    Contrôleur Laravel (PHP)

    public function authentifier(\Illuminate\Foundation\Application $app) : bool

    {

        $reussite = $app->auth->attempt(['name' => 'toto', 'password' => 'tata']);

        ...

    }

  • Ok, mais on ne sait toujours pas où est codée la fameuse classe qui est associée à auth. Pour la retrouver, il faut chercher un peu plus loin. 
  • S'il n'est pas évident de faire le lien entre le nom d'un service et le fichier qui contient le code à exécuter, quelques pistes nous sont données dans les commentaires présents dans le haut du fichier de la façade. Ici, cependant, pas de chance. Les classes listées en commentaire ne contiennent pas le code de la fonction attempt(). Dans le cas de la façade Hash, le commentaire dans le haut de la façade nous renvoie directement au fichier Illuminate\Hashing\BcryptHasher qui contient le code recherché.
  • À défaut de trouver mieux, il est possible de faire une recherche dans tout le code (touches Ctrl+Maj+F) pour trouver « attempt( ». Cette fois, bingo ! Le code est écrit dans le fichier vendorl\aravel\framework\src\Illuminate\Auth\SessionGuard.php.

Pour plus d'information

« Facades - Facade Class Reference ». Laravel. https://laravel.com/docs/master/facades#facade-class-reference

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre