Hello there,
I'm trying to store my project. I created Services/ProjectServices.php like I seen in this video https://www.youtube.com/watch?v=ShrS3HXwzPg, to refactor my code.
Services/PostServices.php
<?php
namespace App\Services;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Facades\Image;
// use App\User;
// use App\Project;
// use Illuminate\Http\Request;
class ProjectService
{
public function uploadThumbnailToUserProjectFolder()
{
$project = session('project');
$project_thumbnail = session('thumbnail');
$project_author = session('author');
// dd($project_thumbnail);
//je stoke le pseudonyme de l'utilisateur dans une variable
$userFolder = $project_author->username;
// je stocke le chemin dans lequel sera le thumbnail dans une variable
$storagePath = 'projets/' . $userFolder . '/thumbnail';
//je supprime le thumbnail actuel
Storage::delete('public/' . $storagePath . '/' . $project->thumbnail);
//si le chemin dans chemin dans lequel sera le thumbnail n'existe pas
if (!Storage::exists($storagePath)) {
// je le crée.
$storagePath;
}
// je donne un nom customisé au fichier
$new_name = 'thumbnail_' . gmdate('d_m_Y_h_i_s') . '.' . $project_thumbnail->getClientOriginalExtension();
//je le déplace dans le dossier 'public/projets/[pseudonyme-utilisateur]/thumbnail
$project_thumbnail->move(public_path("/storage/{$storagePath}"), $new_name);
//j'indique que le thumbnail du projet aura pour nom le nom customisé
$project->thumbnail = $new_name;
$projectThumb = $project->thumbnail;
return $projectThumb;
}
}
in my ProjectController.php / store I call this function
public function store(StoreProject $request, ProjectService $projectService)
{
//pour une question de sécurité, je recherche l'utilisateur connecté
$user = Auth::user();
// je récupère mon auteur que je stocke en session pour le passer à mon service 'ProjectSertvice -> transformBase64Url()
session(['author' => Auth::user()]);
// je récupère mon l'input 'content' que je stocke en session pour le passer à mon service 'ProjectSertvice -> transformBase64Url()
session(['content' => $request->input('content')]);
// $this->getUrlToImage();
// je retrouve la catégorie en correspondance avec celle sélectionnée dans le formulaire
$cat = Category::where('id', $request->category)->firstOrFail('id');
$difficulty = DifficultyLevel::where('id', $request->difficulty)->firstOrFail('id');
//je retrouve l'unité de mesure en correspondance avec celle sélectionnée dans le formulaire
$unity = UnityOfMeasurement::where('id', $request->unity_of_measurement)->firstOrFail('id');
//je crée le project
$project = new Project([
'user_id' => $user->id, //je donne l'id de l'utilisateur connecté
'category_id' => $cat->id, //je donne l'id de la catégorie
'difficulty_level_id' => $difficulty->id,
'title' => $request->title,
'duration' => $request->duration,
'unity_of_measurement_id' => $unity->id, //je donne l'id de l'unité de mesure
'budget' => $request->budget,
'content' => $projectService->transformBase64ToUrl()
]);
session(['project' => $project]);
if ($request->has('thumbnail')) {
session(['thumbnail' => $request->file('thumbnail')]);
$projectService->uploadThumbnailToUserProjectFolder();
}
$project->save();
...
}
}
if ($request->input('submit') == 'draft') {
return redirect()->route('projets.edit', [
'project' => $project
])->with('status', 'votre projet a été sauvé comme brouillon !');
}
if ($request->input('submit') == 'publish') {
$project->update([
'status_id' => 2
]);
return redirect()->route('projets.show', [
'project' => $project
])->with('status', 'Projet publié !');
}
}
When I attempt to store my project I have this exeption Serialization of 'Illuminate\Http\UploadedFile' is not allowed . I know it's a problem of passing upload file like it says here https://laracasts.com/discuss/channels/laravel/message-serialization-of-illuminatehttpuploadedfile-is-not-allowed , but I don't know how to do that ...
Can you help me to fix that please?
Thank you in advance. See you+.