web-dev-qa-db-ja.com

Laravel 5.6画像のアップロード、記事のスラッグを画像名としてデータベースに保存

Laravel 5.6とCollective HTMLを使用しています。

表の記事があり、単一の記事をアップロードするフォームを作成しています

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.');
}

見る

!! 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() !!}

私は this をナメクジに使用しています

記事を作成すると、タイトルに基づいてスラッグが自動的に形成されます。私が達成したいのは、画像ファイル(jpg、png、jpeg)をアップロードし、画像名をデータベースに保存し、画像をpublic/uploads/articlesフォルダに保存することです。

イメージ名を言うとき、たとえばイメージ名を記事iikeのスラッグにしたい

Article 1を作成すると、slugが自動的にarticle-1に作成されます。画像名をarticle-1.jpg(画像拡張子)にデータベースに保存し、画像article-1.jpgを公開します。フォルダ。

ファイルの名前を変更してこの機能を実現する方法。

5
Srikanth Gopi

次のコードを使用して、データベースにファイルとスラッグを保存できます

 /**
 * 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.');
}

上記のコードは、タイトルをスラッグに変換し、名前の画像をスラッグとして保存します。

お役に立てれば。

5
Adnan Mumtaz

記事$article->save()を保存すると、そのオブジェクトとそのすべてのメソッドなどが利用可能になります。

使用しているslugパッケージには、->slugプロパティはsluggable特性の一部であるため、(Storageファサードを使用している場合)次のようなことができます。

Storage::put($article->slug.'jpg', $request->file('file_field'));

または、flystem実装を使用していない場合は、次のようにファイルを保存できます。

$request->photo->storeAs('images', $article->slug.'jpg');

$request->photoは、フォームのファイルフィールドです。

明らかに、ファイルに対して何らかの処理を実行してmimetype(jpgではない可能性があります)を取得し、おそらくサイズ変更/トリミングなどを行う必要がありますが、これで開始できます。

0
Joe