@Maxemp

Почему не работает кнопка загрузки картинок?

Проблема заключается в том, что после выбора картинки и нажатии кнопки "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;
	}
}
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы