Я использую Symfony UX CropperJS внутри LiveComponent, и пользовательский интерфейс обрезки работает правильно (я могу перемещать/изменять размер рамки обрезки), но при отправке обрезанное изображение всегда является полным исходным изображением.
Когда я сбрасываю объект Crop, данные обрезки содержат x = 0, y = 0, а ширина/высота равны нулю, поэтому getCroppedImage() возвращает исходное изображение вместо обрезанного.
Код: Выделить всё
LiveComponent
#[AsLiveComponent]
final class CropImage extends AbstractController
{
use DefaultActionTrait;
use ComponentWithFormTrait;
#[LiveProp]
public ?string $imageName = null;
public function instantiateForm(): FormInterface
{
$crop = $this->cropper->createCrop(
$this->imgDir.'tmp/'.$this->imageName
);
$crop->setCroppedMaxSize(600, 600);
return $this->createFormBuilder(['crop' => $crop])
->add('crop', CropperType::class, [
'public_url' => $this->assets->getUrl(
'profile_pic/tmp/'.$this->imageName
),
'cropper_options' => [
'aspectRatio' => 1,
'viewMode' => 1,
'dragMode' => 'none',
'cropBoxResizable' => false,
'zoomable' => true,
'responsive' => false,
'autoCropArea' => 0.8,
],
])
->getForm();
}
#[LiveAction]
public function cropImage()
{
$this->submitForm();
/** @var Crop $crop */
$crop = $this->getForm()->get('crop')->getData();
dd($crop); // width & height are null
$croppedImage = $crop->getCroppedImage();
file_put_contents(
$this->imgDir.'profile.jpg',
$croppedImage
);
}
}
Код: Выделить всё
{{ form_start(form) }}
{{ form_widget(form) }}
Crop it!
{{ form_end(form) }}
Сброс объекта обрезки показывает:
Код: Выделить всё
options: [
"x" => 0,
"y" => 0,
"width" => null,
"height" => null,
]
Вопрос
Как правильно подключить Symfony UX CropperJS внутри формы LiveComponent, чтобы координаты обрезки (ширина/высота) передавались правильно?
Существует ли необходимый способ визуализации формы или привязки атрибутов формы LiveComponent для правильной работы CropperType?>
Подробнее здесь: https://stackoverflow.com/questions/798 ... full-image
Мобильная версия