ライブラリを使用してアップロード画像を管理するリポジトリを作成しました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 );
誰かが問題を見つけるのを手伝ってくれますか?