Я создал репозиторий для управления загружаемым изображением с помощью Intervention/Image
library, но когда я пытаюсь сохранить изображение, я получаю 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);
}
Когда я отправляю форму, я получаю:
FatalErrorException в строке 119 Image.php: вызов функции-члена encode() для null в строке 119 Image.php в FatalErrorException->__construct() в строке 133 HandleExceptions.php в HandleExceptions->fatalExceptionFromError() в строке 118 HandleExceptions.php в HandleExceptions->handleShutdown() в строке HandleExceptions.php 0 в Image->encode() в строке Image.php 139 в Image->save() в строке InterventionImageRepository.php 96 в InterventionImageRepository->save() в PlacesController.php строка 80 в PlacesController->store() в Controller.php строка 76
Проблема должна быть здесь: at Image->save() in InterventionImageRepository.php line 96
и эта строка находится в конкретном классе, в методе сохранения:
$this->image->save( $fileFolder );
Может ли кто-нибудь помочь мне найти проблему?
"intervention/image": "^2.3"
, стоит ли менять? @Joel Нет, в конструкции я просто вставляю библиотеку - person Christian Giupponi   schedule 26.12.2015public function __construct( Image $image ) { $this->image = $image; }
. Поэтому, если вы не предоставите изображение при запуске репозитория,$this->image
не будет иметь фактического изображения. - person Joel Hinz   schedule 26.12.2015$image = Image::make($fileFolder);
в методsave
, но теперь он говоритCall to undefined method Intervention\Image\Image::make()
- person Christian Giupponi   schedule 26.12.2015