当前位置: 首页 > 知识库问答 >
问题:

如何使用kartik-v/yii2-小部件-文件输入在yii2上加载几个文件?

宗政松
2023-03-14

我决定上传几个图像文件使用文件输入小部件

<?= $form->field($model, 'imageFiles[]')->widget(FileInput::classname(),[
        'name' => 'imageFiles[]',
        'attribute' => 'imageFiles[]',
        'options' => ['multiple' => true],
        'pluginOptions' => [
            'previewFileType' => 'any',
            'showPreview' => true,
            'showCaption' => true,
            'showRemove' => true,
            'showUpload' => false,
            'uploadClass' => 'hide',
            'overwriteInitial'=>false,
            'initialPreviewAsData'=>true,
            'uploadUrl' => Url::to(['/site/image-manager-upload']),
            'fileActionSettings' =>['showUpload' => false],
            'maxFileCount' => 10
        ],
    ]); ?>

控制员/行动

public function actionCreate()
    {
        $model = new Hotel();
        $model->load(Yii::$app->request->post());
        $model->imageFiles = UploadedFile::getInstances($model, 'imageFiles');
        var_dump($model->imageFiles);die();
        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }

        return $this->render('create', [
            'model' => $model,
        ]);
    }

模型

class Hotel extends \yii\db\ActiveRecord
{
    const STATUS_OFF = 0;
    const STATUS_ON = 1;

    const TYPE_POINTS = 0;
    const TYPE_STARS = 1;

    public $imageFiles;

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'hotel';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['name', 'url', 'reting_id', 'reting_type'], 'required'],
            [['text'], 'string'],
            [['reting_id', 'reting_type', 'status', 'created_at', 'updated_at'], 'integer'],
            [['name', 'url'], 'string', 'max' => 255],
            [['imageFiles'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg', 'maxFiles' => 4],
        ];
    }

这是印刷品

array(1) { 
    [0]=> object(yii\web\UploadedFile)#168 (5) { 
        ["name"]=> string(12) "IMG_2793.jpg" 
        ["tempName"]=> string(36) "C:\OSPanel\userdata\temp\phpC2A1.tmp" 
        ["type"]=> string(10) "image/jpeg" 
        ["size"]=> int(264672) ["error"]=> int(0) 
    } 

后果

结果是数组中只有最后一个文件。如果我不使用这个小部件,那么一切都是正常加载的数组。

如何加载和处理一组照片?

共有1个答案

宋鸿
2023-03-14

我已经做了。

<? echo FileInput::widget([
'name' => $model->formName() . '[imageFiles][]',
'options' => ['multiple' => true],
'pluginOptions' => [
    'previewFileType' => 'any',
    'showPreview' => true,
    'showCaption' => true,
    'showRemove' => true,
    'showUpload' => false,
    'uploadClass' => 'hide',
    'overwriteInitial'=>false,
    'initialPreviewAsData'=>true,
    'fileActionSettings' =>['showUpload' => false],
    'maxFileCount' => 10
],

]); ?

这是工作

 类似资料:
  • 我想使用kartik sidenav小部件。我通过composer安装了kartik-v/yii2小部件扩展。 我可以在这里看到:advanced\vendor\kartik-v\yii2 widget sidenav和extensions。php也进行了修改: 然而,在我看来,当我试图使用它时, 它显示类kartik\小部件\SideNav'未找到错误什么是错误的?

  • 所以我正在和Yii2一起工作,对它来说是相当新的。我正在使用Kartik文件上传,并试图将代码转换为多个文件。但它只保存了第一个文件。 我已经删除了验证,因为这也是失败的,但一旦我知道所有其他的都在工作,我会重新添加。 型号: 控制器: 查看:

  • 阅读Yii2 kartik小部件FileInput的文档时,我找不到有关数据应存储在其中的字段类型的任何详细信息。 http://demos.krajee.com/widget-details/fileinput 我应该使用BLOB字段还是String?

  • 我试图使用在表单中加载多个文件。 我使用我的表将文件名和其他字段保存在数据库中,并将文件保存在我的文件系统中。我通常把和通过表链接起来。 我成功地保存了多个文件,但当我加载特定

  • 这是情况:我是第一次在Yii2上,想在ActiveForm中使用一些文件上传器小部件...到目前为止,我已经找到了这个出色的:\kartik\widget\FileInput 有了这个小部件,我可以管理文件上传,然后,当进入编辑模式时,显示以前上传的图像和替换它的机会。 问题是,如果我按下表单的“更新”按钮而不修改图像,yii说图像“不能是空的”,因为我在模型中设置了“必需”规则。

  • 我正在使用kartik文件输入。 我无法验证,即在提供所需文件时仍然显示验证错误。下面是我的代码。文件已正确上载。但仍然显示“请上传一个文件。” 视图: 行动: 模型设置: 上传功能: