X

Laravel 5.0 – Pilotes de fichiers cloud


Dans Laravel 5, vous pouvez désormais utiliser la même classe Filesystem qui simplifiait auparavant les interactions avec le système de fichiers local, et désormais l’utiliser également avec S3 et Rackspace. C’est une interface simple, alimentée en backend par Franck de Jonge‘s Flysystem.

Cela signifie que vous pouvez écrire votre application comme vous l’avez fait en utilisant le stockage de fichiers local :

/**
 * Save a thing
 * @param Thing  $thing
 * @param string $filename
 */
public function saveThing(Thing $thing, $filename)
{
    File::put('uploads/' . $filename, $thing);
}

Mais maintenant, vous pouvez, à tout moment, modifier les paramètres de votre application de production pour utiliser un hôte externe (nous utiliserons s3 dans notre exemple) à la place, sans changer une ligne de votre logique métier.

Passer à s3

Tout d’abord, vous devez ajouter la dépendance du fournisseur de cloud à composer.json ; pour s3, c’est le SDK AWS (aws\aws-sdk-php).

$ composer require aws\aws-sdk-php

Ensuite, éditez config/filesystems.php (ou config/production/filesystems.phpvous configurez donc uniquement pour le site de production), modifiez le pilote par défaut de local pour s3puis ajoutez vos informations d’identification s3 au s3 section de la baie de disques :

return [
    'default' => 's3',
    'disks' => [
        's3' => [
            'driver' => 's3',
            'key' => 'fslkfqweoirqew',
            'secret' => '24j12oin12oi5nio251',
            'bucket' => 'my-awesome-website-bucket'                        
        ]
    ]
];

Cloud par défaut vs normal par défaut

De manière unique, la configuration du système de fichiers a deux defaults : la valeur par défaut du système de fichiers (qui est injectée lorsque vous tapezhint Illuminate\Contracts\Filesystem\Filesystemet également lié au conteneur en tant que filesystem.disk) et le Cloud par défaut (qui est injecté lorsque vous tapezhint Illuminate\Contracts\Filesystem\Cloudet également lié au conteneur en tant que filesystem.cloud). De cette façon, vous pouvez faire en sorte que n’importe quel environnement donné ait un local par défaut et une configuration de système de fichiers cloud par défaut.

Si vous utilisez la façade, vous obtiendrez le défaut par défaut par défaut, plutôt que le nuage défaut. (Dites ça cinq fois vite…)

Remarques

  • Vous pouvez également utiliser les mêmes informations d’identification pour plusieurs environnements et simplement utiliser différents compartiments ; ou vous pouvez utiliser des informations d’identification différentes ; ou vous pouvez même utiliser différents pilotes. Cela dépend entièrement de vous.
  • Toutes les méthodes File habituelles sont disponibles pour ces nouveaux pilotes : put, get, etc.
  • N’oubliez pas d’injecter le contrat de système de fichiers (Illuminate\Contracts\Filesystem\Filesystem) au lieu d’utiliser la façade si vous accédez à des fichiers ailleurs que sur vos contrôleurs.
  • Je ne le savais pas, mais Jeffrey Way vous montre comment vous pouvez dans ton code (pas dans la configuration) définissez le pilote que vous souhaitez utiliser en injectant la Filesystem Factory. En savoir plus sur son Laracast sur les systèmes de fichiers multiples

Conclusion

Une fois que vous avez installé le kit SDK AWS et modifié filesystems.php, toutes vos opérations sur les fichiers se produisent maintenant sur votre compte s3. C’est ça! Pas de travail supplémentaire, pas d’étapes supplémentaires : vous êtes opérationnel, stockez et accédez aux fichiers dans le cloud comme un pro. Marche à suivre.