Yii2-观点给了我错误提交一个excel文件后Yii2-观点给了我错误提交一个excel文件后(Y

2019-05-12 11:08发布

我的工作Yii2 。 我在导入Excel文件。 虽然在导入我也发送id以前的模型。 过程如下

  1. 用户打开GUI,并从下拉列表中选择一些值,然后点击创建按钮。

创建控制器

 public function actionCreate()
  {
    $model = new MeterAcceptanceHeader();
    $model->prepared_by = Yii::$app->user->id;
    $model->prepared_at = date('Y-m-d H:i:s');

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['excel','id'=>$model->id]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}
  1. 点击下一步按钮后,用户会提示一个新的窗口,要求他上传的Excel文件。

    Excel的控制器

     public function actionExcel($id){ $file_name = "excel_" . Yii::$app->user->id . ".xlsx"; $error = ""; if(isset($_FILES['file'])) { $path_parts = pathinfo($_FILES["file"]["name"]); $extension = $path_parts['extension']; if(!in_array($extension,['xlsx','xls'])){ $error = "Invalid file"; }else { if (move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $file_name)) { $this->redirect([ 'process', 'file_name' => $file_name, 'header_no' => $_POST['header_no'], 'id'=>$id ]); } } } return $this->render("excel",['error'=>$error,'id'=>$id]); } 

    Excel检视

      <div class="box-body"> <?php if($error != ""){?> <div class="alert alert-danger"><?=$error?></div> <?php } ?> <form action="" method="post" enctype="multipart/form-data"> <input type="hidden" name="_csrf" value="<?= Yii::$app->request->getCsrfToken() ?>"/> <input id="btn" class="form-control" type="file" name="file" /> <div class="form-group"> <br /> Header Row <br /> <select name="header_no" class="form-control"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> </select> <br /> <input type="submit" value=" Next " class="btn btn-primary" /> </div> </form> </div> 
  2. 上传Excel文件中的用户后会点击下一步按钮

  3. 现在,在这个窗口的用户将被要求地图数据库领域的Excel领域

过程控制器

 public function actionProcess(){

    $file_name = $_GET['file_name'];
     $id = $_GET['id'];

    try {
        $header_index = $_GET['header_no'];

        $data = \moonland\phpexcel\Excel::widget([
            'mode' => 'import',
            'fileName' => 'uploads/' . $file_name,
            'setFirstRecordAsKeys' => false, // if you want to set the keys of record column with first record, if it not set, the header with use the alphabet column on excel.
            'setIndexSheetByName' => false, // set this if your excel data with multiple worksheet, the index of array will be set with the sheet name. If this not set, the index will use numeric.
            'getOnlySheet' => 0, // you can set this property if you want to get the specified sheet from the excel data with multiple worksheet.

        ]);

        if (isset($data[0])) {
            $headers = $data[0][$header_index];
        } else {
            $headers = $data[$header_index];
        }

    }catch (Exception $x){
        print_r($x->errorInfo);
    }

    return $this->render('excel_options',['headers'=>$headers,'file_name'=>$file_name,'header_index'=>$header_index,'id'=>$id]);

}

Excel选项查看

     <form action="import" method="post">
      <input type="hidden" name="file_name" value="<?=$_GET['file_name']?>" />
            <input type="hidden" name="header_index" value="<?= $_GET['header_no'] ?>"/>
            <input type="hidden" name="model_id" value="<?= $_GET['id'] ?>"/>
            <h1>Maping</h1>

            <div class="row">
                <div class="col-md-2">
                  Ref #:
                </div>
                <div class="col-md-4">
                    <label>
                        <select name="field[0][ref_no]" class="form-control">
                           <option value="">Select A field</option>
                       <?php foreach($headers as $k=>$v) { ?>
                            <?php if (trim($v) != '') { ?>
                           <option value="<?=$k?>"><?=$v?></option>
                                <?php } ?>
                       <?php } ?>
                       </select>
                    </label>
                </div>
            </div>

            <div class="row">
                <div class="col-md-2">
                Meter MSN:
                    </div>
                <div class="col-md-4">
                    <label>
                        <select name="field[0][meter_msn]" class="form-control">
                            <option value="">Select A field</option>
                            <?php foreach ($headers as $k => $v) { ?>
                            <?php if (trim($v) != '') { ?>
                                <option value="<?= $k ?>"><?= $v ?></option>
                                <?php } ?>
                            <?php } ?>
                        </select>
                    </label>
                </div>
            </div>

            <div class="row">
                <div class="col-md-2">
                    Meter Type:
                </div>
                <div class="col-md-4">
                    <label>
                        <select name="field[0][meter_type]" class="form-control">
                            <option value="">Select A field</option>
                            <?php foreach ($headers as $k => $v) { ?>
                                <?php if (trim($v) != '') { ?>
                                    <option value="<?= $k ?>"><?= $v ?></option>
                                <?php } ?>
                            <?php } ?>
                        </select>
                    </label>
                </div>
            </div>

            <div class="row">
                <div class="col-md-2">
                   Sub-Div:
                </div>
                <div class="col-md-4">
                    <label>
                        <select name="field[0][sub_div]" class="form-control">
                            <option value="">Select A field</option>
                            <?php foreach ($headers as $k => $v) { ?>
                                <?php if (trim($v) != '') { ?>
                                    <option value="<?= $k ?>"><?= $v ?></option>
                                <?php } ?>
                            <?php } ?>
                        </select>
                    </label>
                </div>
            </div>


            <div class="row">
                <div class="col-md-2"></div>

                <div class="col-md-4">
                    <br />
                    <input type="submit" class="btn btn-primary pull-left" />

                </div>
            </div>
        </form>

上述观点被称为在process动作控制器。 而在该图中,我传递模型ID作为隐藏字段。

  1. 映射文件,并点击提交按钮后,文件中的数据将被保存到数据库中。 下面是导入操作,将数据保存到数据库中

     public function actionImport() { $file_name = $_POST['file_name']; $header_index = $_POST['header_index']; $fieldSet = $_POST['field']; $model_id = $_POST['model_id']; print_r($model_id); die(); . . . return $this->render('excel_finish', ['records_saved' => $ok_count,'status_arr'=>$status_arr]); } 

什么到目前为止,我已经做了

我能够从用户(包括Excel文件),选择数据。 映射后,它应该对进口行动,但我得到以下错误

未找到(#404)找不到网页。

网址: http://localhost:225/inventory-web/backend/web/meteracceptanceheader/process/import

更新1

而在浏览器检查元素,我可以看到的model id

我一定是做错了什么,我不知道。

任何帮助将高度赞赏。

Answer 1:

此错误“未找到(#404)找不到网页”。 意味着它无法解决您从指定的URL请求。 而你的情况是:

http://localhost:225/inventory-web/backend/web/meteracceptanceheader/process/import

这是假设应该是这样的:

http://localhost:225/inventory-web/backend/web/meteracceptanceheader/import

退房请求是如何处理在本指南Yii2 ,&你如何使用“UrlHelper”产生你的应用程序的URL。



Answer 2:

你肯定获得通过后的文件名$file_name = $_POST['file_name'] ???

刚刚尝试var_dump($_FILE)变量。

你会得到的文件名$_FILES["file_name"]["name"]通过这一点。



文章来源: Yii2- view gives me error after submitting an excel file