0

ユーザーから画像を取得して名前を変更した後、名前を変更した画像名をデータベースに保存したいと考えています。これが私のコントローラーコードです。介入パッケージを使用しています。名前を変更した後、写真を宛先フォルダーに正しく保存できますが、名前を変更した後、写真の名前をデータベースに保存できません。コードは何になりますか?

public function store(UserRequest $request)
    {
        $farmer = User::create([
            'name'            =>  $request->name,
            'phone'           =>  $request->phone,
            'address'         =>  $request->address,
            'nid'             =>  $request->nid,
            'dob'             =>  $request->dob,
            'remarks'         =>  $request->remarks,
            'division_id'     =>  $request->division_id,
            'district_id'     =>  $request->district_id,
            'upazila_id'      =>  $request->upazila_id,
            'farmer_point_id' =>  $request->farmer_point_id,
            'user_type_id'    =>  3   // 3 is for farmer
        ]);
        $image = Image::make($request->profile_picture);
        $image->resize(250, 272);
        $image->save(public_path("uploads/Farmers/farmer_$farmer->id.jpg"));

        return redirect("farmer/{$farmer->id}");
    }
4

1 に答える 1

0

理想的な方法は、最初に画像をアップロードしてから、ファイル パスをデータベースに保存することです。

理想的には、アップロード ロジックを別のスタンドアロン クラスに抽出することをお勧めします。以下をガイドとして使用できます。

<?php
Class UploadImage
{
 /**
     * UploadPostImage constructor.
     * .
     * @param UploadedFile $postedImage
     *
     */
    public function __construct(UploadedFile $postedImage)
    {
        $this->postedImage = $postedImage;
    }

 /**
     * Create the filename
     *
     */
    public function getFilename()
    {
        $dt = Carbon::now();
        $timestamp = $dt->getTimestamp();

        $this->filename = $timestamp . '_' . $this->postedImage->getClientOriginalName();
    }

 /**
     * Create the image and return the path
     *
     * @param $path
     * @param int $width
     * @return mixed
     */
    public function createImage($path, $width = 400)
    {
        // Upload the image
        $image = Image::make($this->postedImage)
            ->resize(250, 272);

        $image->save(public_path($path . $this->filename, 60));

        return $path . $this->filename;
    }
}

コントローラーで、このクラスを呼び出すことができます

$uploadImage = new Image(UploadedFile $file);
$uploadImage->getFilename();
$data['image'] = uploadImage->createImage('your-upload-path');

// $data 配列に他のデータを追加し、データベースに保存します。

 $data['phone'] = $request->name,
    $data['address'] = $request->address
    // Add other data then pass it into User::create()

コントローラーで createImage() を呼び出すと、パスが返され、これをデータベースに保存できます。これが役立つことを願っています!

于 2016-09-19T21:09:13.423 に答える