1

ライブラリを使用してアップロード画像を管理するリポジトリを作成しましたIntervention/Imageが、画像を保存しようとするとCall to a member function encode() on null.

これは私のインターフェースです:

namespace App\Repositories\MeetMount\ImageUploader;

use Illuminate\Http\Request;

interface ImageContract {
    public function getExt($filename);
    public function setFolder($folderName);
    public function getRandomFilename($fileName);
    public function addWatermark($watermarkName);
    public function resize($width, $height);
    public function getFileName();
    public function save(Request $file);
}

これは私の具象クラスです:

namespace App\Repositories\MeetMount\ImageUploader;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;
use Intervention\Image\Image;

class InterventionImageRepository implements ImageContract {

    /**
     * @var Image
     */
    private $image;

    /**
     * @var $folder
     */
    private $folder;

    /**
     * InterventionImageRepository constructor.
     *
     * @param Image $image
     */
    public function __construct( Image $image )
    {
        $this->image = $image;
    }

    /**
     * Restituisce l'estensione dell'immagine
     *
     * @param $fileName
     * @return string
     */
    public function getExt( $fileName )
    {
        $pos = strrpos( $fileName, '.' );
        $ext = substr( $fileName, $pos, strlen( $fileName ) );

        return $ext;
    }

    /**
     * Imposta la cartella dove salvare l'immagine
     *
     * @param $folderName
     * @return $this
     */
    public function setFolder( $folderName )
    {
        $folderPath = public_path( $folderName );

        if( ! File::exists( $folderPath ) )
        {
            File::makeDirectory( $folderPath );
        }

        $this->folder = $folderPath;

        return $this;
    }

    public function getRandomFilename( $fileName )
    {
        // TODO: Implement getRandomFilename() method.
    }

    /**
     * Aggiungi watermark
     *
     * @param $watermarkName
     * @return $this
     */
    public function addWatermark( $watermarkName )
    {
        $watermarkPath = public_path( 'images/watermarks/' . $watermarkName );
        $this->image->insert( $watermarkPath );

        return $this;
    }

    /**
     * Salva il file
     *
     * @param $file
     * @return $this
     */
    public function save( Request $request )
    {
        $file = $request->file('immagine');

        $fileFolder = $this->folder . '/' . $file->getClientOriginalName();

        $this->image->save( $fileFolder );

        return $this;

    }

    public function getFileName()
    {
        // TODO: Implement getFileName() method.
    }

    public function resize( $width, $height )
    {
        // TODO: Implement resize() method.
    }
}

そして、これはストアメソッドです:

public function store( CreatePlaceRequest $request )
{
    $this->imageRepository->setFolder('cartella-prova')->save($request);
}

フォームを送信すると、次のようになります。

Image.php の 119 行目の FatalErrorException: Image.php の 119 行目の null でのメンバー関数 encode() の呼び出し HandleExceptions.php の 133 行目の HandleExceptions->fatalExceptionFromError() の 118 行目の null HandleExceptions.php の HandleExceptions->handleShutdown() 0 行目 Image.php の Image->encode() 139 行目 InterventionImageRepository.php の Image->save() 96 行目 InterventionImageRepository->save() の PlacesController.php Controller.php の PlacesController->store() の 80 行目 76 行目

問題はここにあります:at Image->save() in InterventionImageRepository.php line 96

その行は具象クラスの save メソッドにあります。

$this->image->save( $fileFolder );

誰かが問題を見つけるのを手伝ってくれますか?

4

1 に答える 1