表单 – yii2规则不适用于非db属性?

表单 – yii2规则不适用于非db属性?,第1张

概述我想一次上传多个文件.我有 一个模型: class KakiKingModel extends ActiveRecord { public $uploadedFiles; public function rules() { return [ [['uploadedFiles'], 'file', 'extensions' => 'txt' 我想一次上传多个文件.我有

一个模型:

class KakiKingModel extends ActiveRecord {    public $uploadedfiles;    public function rules() {        return [            [['uploadedfiles'],'file','extensions' => 'txt','checkExtensionByMimeType' => false,'skipOnEmpty' => true,'maxfiles' => 2]];    }    ...

控制器:

use yii\web\Uploadedfile;...public function actionUpload() {    $model = new KakiKingModel;    $t = new KakiKingModel;    if (Yii::$app->request->isPost) {        $files = Uploadedfile::getInstances($model,'uploadedfiles');        $t = [];        $i = 0;        foreach ($files as $i => $file) {            $t[$i] = new KakiKingModel;            $t[$i]->contentUploadedfile = file($file->tempname);            $t[$i]->assign(); // assign file content to model attributes            $i++;        }        if (Model::valIDateMultiple($t)) {            foreach ($t as $item) {                $item->save(false);            }            return $this->redirect(['index']);        } else {            return $this->render('upload',[                        'model' => $model,'t' => $t,]);        }    }    return $this->render('upload',[                'model' => $model,]);}

视图:

$form = ActiveForm::begin([    ....    'options' => ['enctype' => 'multipart/form-data'],...        <?= $form->fIEld($model,'uploadedfiles[]')->fileinput(['multiple' => true]) ?>

问题是,它也接受任何其他类型的文件!这是为什么?我究竟做错了什么?谢谢!
更新:我已经改变了我的内容,以便您可以更好地理解为什么我发现它令人不安它不起作用.它应该工作恕我直言.你能帮我么?谢谢!

解决方法 Yii2验证规则也适用于非数据库模型属性.

我认为这个问题有两个常见原因:

1)确保添加正确的enctype以便将文件发送到服务器:

use yii\Widgets\ActiveForm;...<?PHP $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>

2)yii\validators\FileValidator(aliased with file)仅适用于yii\web\UploadedFile类实例(它是PHP本机超全局$_FILES数组的抽象),请确保在验证之前为属性分配正确的值.

对于单个文件使用\yii\web\UploadedFile::getInstance():

use yii\web\Uploadedfile;...$this->file = Uploadedfile::getInstance($this,'file');

对于多个文件,请使用\yii\web\UploadedFile::getInstance():

use yii\web\Uploadedfile;...$this->files = Uploadedfile::getInstances($this,'files');

这可以在调用$model-> save()或$model-> valIDate()之前或在beforeValIDate()事件处理程序中完成:

/** * @inheritdoc */public function beforeValIDate(){    $this->files = Uploadedfile::getInstances($this,'files');    return parent::beforeValIDate();}
总结

以上是内存溢出为你收集整理的表单 – yii2规则不适用于非db属性?全部内容,希望文章能够帮你解决表单 – yii2规则不适用于非db属性?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1070457.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存