我正在尝试上传没有ActiveForm或模型的个人资料图片。
根据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 File Upload,但它使用的模型不是我想要的