Проблема заключается в том, что после выбора картинки и нажатии кнопки "upload" вообще ничего не происходит, и ещё когда я выбираю вторую картинку, ту что я выбрал первой пропадает и заменяется второй, хоть такого не должно происходить.
Так как я не знаю из-за чего это может быть, то оставлю весь код, который относится к загрузке картинок
Сущность Photo:
class Photo extends ActiveRecord
{
public static function create(UploadedFile $file):self
{
$photo = new static();
$photo->file = $file;
return $photo;
}
public static function tableName()
{
return '{{%photo}}';
}
public function behaviors() {
return [
[
'class' => ImageUploadBehavior::className(),
'attribute' => 'file',
'createThumbsOnRequest' => true,
'filePath' => '@staticRoot/origin/[[pk]].[[extension]]',
'fileUrl' => '@static/origin/[[pk]].[[extension]]',
'thumbPath' => '@staticRoot/cache/[[profile]]_[[pk]].[[extension]]',
'thumbUrl' => '@static/cache/[[profile]]_[[pk]].[[extension]]',
'thumbs' => [
'admin' => ['width' => 100, 'height' => 70],
'thumb' => ['width' => 640, 'height' => 480]
],
],
];
}
}
котроллер:
class PhotoController extends Controller
{
private $service;
public function __construct( $id, $module, array $config = [], PhotoManageService $service )
{
$this->service = $service;
parent::__construct( $id, $module, $config );
}
public function actionCreate()
{
$form = new PhotoForm();
if ($form->load(Yii::$app->request->post()) && $form->validate()){
try{
$this->service->addPhotos($form);
Yii::$app->session->setFlash('success', 'photo uploaded');
return $this->goHome();
}catch(\RuntimeException $e){
Yii::$app->errorHandler->logException($e);
Yii::$app->session->setFlash($e->getMessage());
}
}
return $this->render('create', ['model' => $form]);
}
}
сервис:
class PhotoManageService
{
private $photos;
public function __construct( PhotoRepository $photos )
{
$this->photos = $photos;
}
public function addPhotos(PhotoForm $form):void
{
foreach($form->files as $file){
$photo = Photo::create($file);
$this->photos->save($photo);
}
}
}
представление:
<div class="box box-default">
<?php $form = ActiveForm::begin([
'enableClientValidation' => false,
'options' => ['enctype'=>'multipart/form-data']
]); ?>
<div class="box-body">
<?= $form->field($model, 'files[]')->widget(FileInput::class, [
'options' => [
'accept' => 'image/*',
'multiple' => true,
]
])
?>
</div>
<? ActiveForm::end();?>
</div>
Форма:
class PhotoForm extends Model
{
/**
* @var UploadedFile[]
*/
public $files;
public function rules() {
return [
['files', 'each', 'rule' => ['image']],
];
}
public function beforeValidate(): bool
{
if (parent::beforeValidate()){
$this->files = UploadedFile::getInstances($this, 'files');
return true;
}
return false;
}
}