UpFile 文件上传

UpFile 文件上传控件可以使用Filed 的所有属性设置,支持 string,array 类型的Model属性字段注解,其中如果是 单文件上传 可以对 string 类型的Model属性字段注解,如果是 多文件上传则对 array 类型的Model属性注解。
除了Field的属性可以设置以为,UpFile 文件上传还有一些自己的属性设置项。

public string $url = '/service/upload';

提交上传文件的路径地址,在BeaconPHP框架中 一般默认是提交到 /service/upload 路径去上传。

public string $mode = 'file';

上传的模式,如果是单文件上传  则填写 file 如是多文件上传则填写 fileGroup .

public string $extensions = '';

允许上传的文件扩展类型,如  jpg,jpeg,png,gif  使用半角逗号分割,如果不做限制可以留空。

public string $fieldName = 'filedata';

定义上传域 的输入框名称,也就是提交上传的字段名称。在 BeaconPHP 的 /service/upload 操作中需要的上传域名称是  filedata ,如果使用其他地址上传,可以修改对应的域名称。

 

public string $nameInput = '';

只有在单个文件上传 即 mode=file 的情况下设置有效,即上传的文件原名称写入哪个输入框,需要填入输入框的name 名称。

public int $size = 0;

最多支持上传的文件数量,只有在多文件上传 如 mode=fileGroup 的情况下设置有效。如果为 0 不做限制。

使用示例如下:
单文件上传:
UserModel

namespace app\home\model;

use beacon\core\Form;
use beacon\widget\Text;
use beacon\widget\UpFile;


#注意 这里需要使用表单注解
#[Form(title: '用户表单', table: '@pf_user', template: 'user.form.tpl')]
class UserModel
{
    #[UpFile(
        label: '上传文件',
        url: '^/service/upload',
        mode: 'file',
        extensions: 'txt,zip,rar,xls,xlsx,doc,docx,ppt,pptx',
        fieldName: 'filedata',
        #指定用 orgName 字段来接收文件原名。
        nameInput: 'orgName'
    )]
    public string $fileUrl = '';

    #[Text(
        label: '文件名称',
    )]
    public string $orgName = '';

}


多文件上传示例:

namespace app\home\model;

use beacon\core\Form;
use beacon\widget\UpFile;


#注意 这里需要使用表单注解
#[Form(title: '用户表单', table: '@pf_user', template: 'user.form.tpl')]
class UserModel
{
    #[UpFile(
        label: '上传文件',
        url: '^/service/upload',
        mode: 'fileGroup',
        extensions: 'txt,zip,rar,xls,xlsx,doc,docx,ppt,pptx',
        fieldName: 'filedata',
        size: 5
    )]
    public array $files = [];

}


模板文件:

<!doctype html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <title>{$form->title}</title>
    <link type="text/css" rel="stylesheet" href="/yeeui/css/yeeui.css"/>
    <link type="text/css" rel="stylesheet" href="/icofont/icofont.css"/>
    <script src="/yeeui/third/jquery-3.3.1.min.js"></script>
    <script src="/yeeui/yee.js"></script>
</head>
<body>
<div style="margin: 20px">
    <form method="post" yee-module="ajax validate">
        <div class="yee-panel">
            <div class="panel-caption">
                {if $form->getType()=='add'}添加{elseif $form->getType()=='edit'}编辑{/if}{$form->title}
            </div>
            <div class="panel-content">
                {foreach from=$form->getViewFields() item=field}
                    {field_row field=$field}
                {/foreach}
            </div>
            <div class="yee-submit">
                <label class="submit-label"></label>
                <div class="submit-cell">
                    {*输出隐藏域*}
                    {$form->fetchHideBox()|raw}
                    <input type="submit" class="form-btn red" value="提交">
                </div>
            </div>
        </div>
    </form>
</div>
</html>

 

控制器页面


namespace app\home\controller;


use app\home\model\UserModel;
use beacon\core\Controller;
use beacon\core\Form;
use beacon\core\Logger;
use beacon\core\Method;

class User extends Controller
{
    #[Method(act: 'index', method: Method::GET)]
    public function index()
    {
        $form = Form::create(UserModel::class, 'add');
        $this->displayForm($form);
    }

    #[Method(act: 'index', method: Method::POST)]
    public function add()
    {
        $user = new UserModel();
        $form = Form::create($user, 'add');
        $input = $this->completeForm($form);
        Logger::log($input); #input 可以用用于插入或者更新数据库。
        Logger::log($user);
        //这里需要有返回值 否则 ajax 提交会没有任何内容返回
        $this->success('ok');
    }

}


单文件演示最终效果:

 

多文件演示效果

Copyright © 2021 海南的叶子 All Rights Reserved 琼ICP备2021000725号

琼公网安备 46900702000037号