J'utilise Laravel 5.6 et Collective HTML.
J'ai un article de table et je crée un formulaire pour télécharger un article unique
ArticleController
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$categories = ArticleCategory::pluck('name', 'id');
return view('backend.articles.create', compact('categories'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request, [
'input_img' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
$article = new Article();
if ($request->hasFile('image')) {
$image = $request->file('image');
$name = str_slug($request->title).'.'.$image->getClientOriginalExtension();
$destinationPath = public_path('/uploads/articles');
$imagePath = destinationPath. "/". $name;
$image->move($destinationPath, $name);
$article->image = $name;
}
$article->title = $request->get('title');
$article->category_id = $request->get('category_id');
// $article->image = str_slug($request->get('image'));
$article->subtitle = $request->get('subtitle');
$article->description = $request->get('description');
$article->save();
return back()->with('success', 'Your article has been added successfully. Please wait for the admin to approve.');
}
Vue
!! Form::open(['route'=>'articles.store']) !!}
<div class="form-group {{ $errors->has('category_id') ? 'has-error' : '' }}">
{!! Form::select('category_id', $categories, null, ['class'=>'form-control', 'placeholder'=>'Choose Category']) !!}
<span class="text-danger">{{ $errors->first('category_id') }}</span>
</div>
<div class="form-group {{ $errors->has('title') ? 'has-error' : '' }}">
{!! Form::text('title', old('title'), ['class'=>'form-control', 'placeholder'=>'Enter Title']) !!}
<span class="text-danger">{{ $errors->first('title') }}</span>
</div>
<div class="form-group {{ $errors->has('subtitle') ? 'has-error' : '' }}">
{!! Form::text('subtitle', old('subtitle'), ['class'=>'form-control', 'placeholder'=>'Upload subtitle']) !!}
<span class="text-danger">{{ $errors->first('subtitle') }}</span>
</div>
<div class="form-group {{ $errors->has('image') ? 'has-error' : '' }}">
{!! Form::file('image', old('image'), ['class'=>'btn-white form-control', 'placeholder'=>'Enter image Url']) !!}
<span class="text-danger">{{ $errors->first('image') }}</span>
</div>
<div class="form-group {{ $errors->has('description') ? 'has-error' : '' }}">
{!! Form::textarea('description', old('description'), ['class'=>'form-control', 'placeholder'=>'Enter Description']) !!}
<span class="text-danger">{{ $errors->first('description') }}</span>
</div>
<div class="form-group">
<button class="btn btn-primary">Submit</button>
</div>
{!! Form::close() !!}
J'utilise this package pour les slugs
Lorsque je crée un article, un slug est automatiquement formé en fonction du titre. Ce que je veux réaliser, c'est télécharger un fichier image (jpg, png, jpeg) et enregistrer le nom de l'image dans la base de données et l'image dans le dossier public/uploads/articles.
Quand je dis le nom de l'image, je veux que le imagename soit le slug de l'article iike par exemple
Si je crée l'article 1, un slug est automatiquement créé article-1, je veux que le nom de l'image soit article-1.jpg (extension de l'image) à enregistrer dans la base de données et enregistrer l'image article-1.jpg au public. dossier.
Comment renommer le fichier et obtenir cette fonctionnalité.
Vous pouvez utiliser le code suivant pour stocker le fichier et le slug dans votre base de données.
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request, [
'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
$article = new Article();
if ($request->hasFile('image')) {
$image = $request->file('image');
$name = str_slug($request->title).'.'.$image->getClientOriginalExtension();
$destinationPath = public_path('/uploads/articles');
$imagePath = $destinationPath. "/". $name;
$image->move($destinationPath, $name);
$article->image = $name;
}
$article->title = $request->get('title');
$article->category_id = $request->get('category_id');
// $article->image = str_slug($request->get('image'));
$article->subtitle = $request->get('subtitle');
$article->description = $request->get('description');
$article->save();
return back()->with('success', 'Your article has been added successfully. Please wait for the admin to approve.');
}
Le code ci-dessus convertit le titre en slug et enregistre l'image du nom en tant que slug.
J'espère que cela t'aides.
Une fois que vous avez enregistré l'article $article->save()
, cet objet et toutes ses méthodes, etc., deviennent disponibles.
Le paquet slug que vous utilisez inclut une propriété ->slug
dans le trait sluggable
afin que vous puissiez (si vous utilisez la façade de stockage) faire quelque chose comme:
Storage::put($article->slug.'jpg', $request->file('file_field'));
Ou, si vous n'utilisez pas l'implémentation flystem, vous pouvez stocker le fichier comme suit:
$request->photo->storeAs('images', $article->slug.'jpg');
$request->photo
étant le champ de fichier de votre formulaire.
Évidemment, vous voudrez effectuer un traitement sur le fichier pour obtenir son type MIME (ce ne sera peut-être pas un jpg) et probablement le redimensionner/le rogner, etc.