web-dev-qa-db-fra.com

Laravel 5.6 Téléchargement d'image, Enregistrer l'article slug sous le nom de l'image dans la base de données

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é.

5
Srikanth Gopi

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.

5
Adnan Mumtaz

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. 

0
Joe