Я пытаюсь загрузить изображение профиля без ActiveForm или Model.
Согласно Yii2 документам мы можем использовать AdHoc Validation Rule, В этом примере используется проверка электронной почты, но мне нужна проверка файла.
Что я пробовал:
public function actionPicture() {
/* @var $user \app\models\User */
/* @var $validator \yii\validators\FileValidator */
$validator = new FileValidator(['extensions' => ['png','jpg']]); // Setting Allowed Extensions
$file = UploadedFile::getInstanceByName('avatar'); // Get File Object byName
if( $validator->validate($file, $errors) ) { // Validate here
$user = User::findOne(['id' => Yii::$app->user->getId()]);
$user->avatar = 'profile-'.$user->id.'.'.$file->getExtension();
if($user->save(false)) {
$file->saveAs(Yii::getAlias('@upload_dir').'/'.$user->avatar);
Yii::$app->user->setIdentity($user);
yii::$app->session->setFlash('success','Profile Picture updated successfully');
}
} else {
yii::$app->session->setFlash('danger',$errors);
}
return $this->redirect(['index']);
}
Мой вопрос: в приведенном выше коде это стандартный способ использования FileValidator без активных форм.
Примечание: я знаю, что мы можем использовать Загрузка файла Yii2, но он использует модель, которую я не хотел
Задача ещё не решена.
Других решений пока нет …