🛫 Envoi de fichier
Traiter les fichiers envoyés
Souvent les requêtes sont associées à des fichiers envoyés par l'utilisateur. Vous pouvez traiter ces fichiers avec Bow\Http\Request via la méthode file et le helper du même nom.
Considérons le formulaire suivant :
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="photo" accept="image/png"><br/>
<button type="submit">Uploader</button>
</form>
Comment avoir accès au fichier envoyé ?
Ici nous pouvons utiliser la méthode file qui retourne null ou une instance de Bow\Http\UploadFile.
use Bow\Http\Request;
$app->post('/upload', function(Request $request) {
$file = $request->file('photo');
// ou
$file = file('photo');
debug($file);
});
Le résultat de debug :
// Debug output
UploadFile {#92 ▼
-file: array:5 [▼
"name" => "23270116.png"
"type" => "image/png"
"tmp_name" => "/tmp/phpellwCx"
"error" => 0
"size" => 7388
]
}
Déterminer si un fichier existe
Vous pouvez déterminer si un fichier est présent sur la requête en utilisant la méthode hasFile :
if ($request->hasFile('photo')) {
//
}
Validation des téléchargements réussis
Vous pouvez vérifier qu'il n'y a pas eu de problèmes lors du téléchargement avec la méthode isUploaded:
$file = $request->file('photo');
if ($file->isUploaded()) {
// Code ici
}
Sauvegarder le fichier
Cela consiste juste à déplacer le fichier téléchargé dans un autre dossier et ceci grâce à la méthode moveTo.
$file = $request->file('photo');
$file->moveTo("/path/to/your/store/directory", $filename = null);
Si $filename est null, sa valeur sera le nom du fichier hashé avec la méthode getHashName.
Souvent dans le cas où vous attendez des fichiers envoyés via un formulaire dont le champ est sous la forme photo[], la méthode file retourne une Bow\Support\Collection.
<form action="/upload" method="post" enctype="multipart/form-data">
<label>Fichier 1: <input type="file" name="photo[]" accept="image/png"></label><br/>
<label>Fichier 2: <input type="file" name="photo[]" accept="image/png"></label><br/>
<button type="submit">Uploader</button>
</form>
Dans cet exemple, la méthode file retournera une Bow\Support\Collection qui contiendra pour chaque occurrence une instance de Bow\Http\UploadFile.
use Bow\Http\Request;
use Bow\Http\UploadFile;
$app->get('/upload', function (Request $request)
{
$files = $request->file('photo');
if (!$files->isEmpty()) {
$files->each(function(UploadFile $file) {
$file->moveTo("/path/to/your/store/directory");
});
}
});
Il manque quelque chose ?
Si vous rencontrez des problèmes avec la documentation ou si vous avez des suggestions pour améliorer la documentation ou le projet en général, veuillez déposer une issue pour nous, ou envoyer un tweet mentionnant le compte Twitter @bowframework ou sur directement sur le github.