yii2 : upload ไฟล์ แบบกากๆ (ฝากแปะไว้ดูทีหลัง)

  • 3 ตอบ
  • 6795 อ่าน
*

อั๋น ทรงวุฒิ

  • Sr. Member
  • ****
  • 326
  • 3
  • แพร่ เวียงโกศัย
    • ดูรายละเอียด
    • songwut.biz
[ Model ]

UploadCSV.php

โค๊ด: [Select]
<?php
namespace app\models;
use 
yii\base\Model;
use 
yii\web\UploadedFile;
/**
* UploadForm is the model behind the upload form.
*/
class UploadCSV extends Model
{
/**
* @var UploadedFile|Null file attribute
*/
public $file;
/**
* @return array the validation rules.
*/
public function rules()
{
return [
[[
'file'], 'file'],
];
}

    public function 
attributeLabels()
    {
        return [
            
'file' => 'ไฟล์ข้อมูล (csv)',

        ];
    }

}

?>

[ Controller ]

SiteController.php

เรียกใช้งานโดย index.php?r=site/import

โค๊ด: [Select]
<?php

use app\models\UploadCSV;
use 
yii\web\UploadedFile;


// ส่วนหนึ่งในเนื้อหาไฟล์

public function actionImport()
    {
        
$model = new UploadCSV();
$filename='';
if (Yii::$app->request->isPost) {
$model->file UploadedFile::getInstance($model'file');
if ($model->validate()) {
$model->file->saveAs('upload/'$model->file->baseName.'.'.$model->file->extension);
$filename=$_FILES['UploadCSV']['name']['file']; //phpinfo();
}
}
return $this->render('import', ['model' => $model,'filename'=>$filename]);
}

?>


[ View ]

import.php

โค๊ด: [Select]
<?php

use yii\helpers\Html;
use 
yii\widgets\ActiveForm;
use 
app\models\UploadCSV;
/* @var $this yii\web\View */
/* @var $model app\models\Simcard */
/* @var $form yii\widgets\ActiveForm */
?>



<?php
$model=new UploadCSV();

if (!empty($filename)) 
{
?>

    <div class="jumbotron">
<h1>ได้รับไฟล์ข้อมูลแล้ว</h1>


<p class="lead">โปรดตรวจสอบเนื้อหาอีกครั้ง เพื่อเช็คความเรียบร้อย</p>

<p><a class="btn btn-lg btn-success" href="index.php">กลับสู่หน้าแรก</a></p>
<h2><?=$filename; ?></h2>
<?php if (($_FILES["UploadCSV"]["type"]["file"]=="image/jpeg")||
($_FILES["UploadCSV"]["type"]["file"]=="image/gif")||
($_FILES["UploadCSV"]["type"]["file"]=="image/png")) 
echo "<img src=upload/".$filename.">"?>


<?php  if ($_FILES["UploadCSV"]["type"]["file"]=="text/comma-separated-values"
echo "<h1>CSV</h1>";
?>

</div>


<?php
//echo phpinfo();
}
else
{
?>



<div class="upload-form">

    <?php $form ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>

<?= $form->field($model, 'file')->fileInput() ?>

   
    <div class="form-group">
        <?= Html::submitButton( 'ส่งข้อมูล', ['class' =>'btn btn-primary']) ?>
    </div>

    <?php ActiveForm::end(); ?>

</div>

<?php
}
?>

« แก้ไขครั้งสุดท้าย: 22 เมษายน 2015, 08:50:02 PM โดย อั๋น ทรงวุฒิ »

*

อั๋น ทรงวุฒิ

  • Sr. Member
  • ****
  • 326
  • 3
  • แพร่ เวียงโกศัย
    • ดูรายละเอียด
    • songwut.biz
Re: yii2 : upload ไฟล์ แบบกากๆ (ฝากแปะไว้ดูทีหลัง)
« ตอบกลับ #1 เมื่อ: 25 เมษายน 2015, 10:29:36 AM »
[ Model ]

backend/models/Import.php


โค๊ด: [Select]
<?php

namespace backend\models;

use 
Yii;
use 
yii\base\Model;
use 
yii\web\UploadedFile;

/**
 * ContactForm is the model behind the contact form.
 */
class Import extends Model
{
    public 
$file;

public function rules()
{
return [
[['file'], 'file'],
];
}


    
/**
     * @inheritdoc
     */
   
    
public function attributeLabels()
    {
        return [
            
'file' => 'ไฟล์นำเข้า (CSV จาก excel)',
        ];
    }

    
/**
     * Sends an email to the specified email address using the information collected by this model.
     *
     * @param  string  $email the target email address
     * @return boolean whether the email was sent
     */

}



[ Controller ]

backend/controllers/SiteController.php

เรียกใช้งานโดย index.php?r=site/import

โค๊ด: [Select]
<?php
use yii\web\UploadedFile;
use 
backend\models\Import;

// เนื้อหาบางส่วนในไฟล์

 
public function behaviors()
    {
        return [
            
'access' => [
                
'class' => AccessControl::className(),
                
'rules' => [
                    [
                        
'actions' => ['login''error'],
                        
'allow' => true,
                    ],
                    [
                        
'actions' => ['logout''index','import'],
                        
'allow' => true,
                        
'roles' => ['@'],
                    ],
                ],
            ],
            
'verbs' => [
                
'class' => VerbFilter::className(),
                
'actions' => [
                    
'logout' => ['post'],
                ],
            ],
        ];
    }

   
   public function 
actionImport()
    {
        
$model = new Import();
$filename='';
if (Yii::$app->request->isPost) {
$model->file UploadedFile::getInstance($model'file');
if ($model->validate()) {
$model->file->saveAs('import/import.'.$model->file->extension);
$filename=$_FILES['Import']['name']['file']; 
//echo phpinfo();
}
}
return $this->render('import', ['model' => $model,'filename'=>$filename]);
}



[ View ]

backend/views/site/import.php


โค๊ด: [Select]
<?php

use yii\helpers\Html;
use 
yii\widgets\ActiveForm;
use 
backend\models\Import;
/* @var $this yii\web\View */
/* @var $model app\models\Simcard */
/* @var $form yii\widgets\ActiveForm */
?>



<?php
$model=new Import();

if (!empty($filename)) 
{
?>

    <div class="jumbotron">
<h1>ได้รับไฟล์ข้อมูลแล้ว</h1>


<p class="lead">โปรดตรวจสอบเนื้อหาอีกครั้ง เพื่อเช็คความเรียบร้อย</p>

<p><a class="btn btn-lg btn-success" href="index.php">กลับสู่หน้าแรก</a></p>
<h2><?=$filename; ?></h2>
<?php if (($_FILES["Import"]["type"]["file"]=="image/jpeg")||
($_FILES["Import"]["type"]["file"]=="image/gif")||
($_FILES["Import"]["type"]["file"]=="image/png")) 
echo "<img src=upload/".$filename.">"?>


<?php  if ($_FILES["Import"]["type"]["file"]=="text/comma-separated-values"
echo "<h1>CSV</h1>";
?>

</div>


<?php
//echo phpinfo();
}
else
{
?>



<div class="upload-form">

    <?php $form ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>

<?= $form->field($model, 'file')->fileInput() ?>

   
    <div class="form-group">
        <?= Html::submitButton( 'ส่งข้อมูล', ['class' =>'btn btn-primary']) ?>
    </div>

    <?php ActiveForm::end(); ?>

</div>

<?php
}
?>

*

nu2499nu

  • Newbie
  • *
  • 1
  • 0
    • ดูรายละเอียด
Re: yii2 : upload ไฟล์ แบบกากๆ (ฝากแปะไว้ดูทีหลัง)
« ตอบกลับ #2 เมื่อ: 03 ธันวาคม 2015, 09:05:04 AM »
สอบถามหน่อยนะครับ ว่าสมมุติผมต้องการ import ข้อมูลไฟล์ excel แล้วข้อมูลที่อยู่ในไฟล์ excel จะเข้าไปใน database เลย จากตัวอย่างนี้ผมสามารถทำได้ไหมครับ มือใหม่หัดเขียนอะครับ รบกวนชี้แนะด้วยนะครับ

*

อั๋น ทรงวุฒิ

  • Sr. Member
  • ****
  • 326
  • 3
  • แพร่ เวียงโกศัย
    • ดูรายละเอียด
    • songwut.biz
Re: yii2 : upload ไฟล์ แบบกากๆ (ฝากแปะไว้ดูทีหลัง)
« ตอบกลับ #3 เมื่อ: 07 ธันวาคม 2015, 06:51:24 PM »
สอบถามหน่อยนะครับ ว่าสมมุติผมต้องการ import ข้อมูลไฟล์ excel แล้วข้อมูลที่อยู่ในไฟล์ excel จะเข้าไปใน database เลย จากตัวอย่างนี้ผมสามารถทำได้ไหมครับ มือใหม่หัดเขียนอะครับ รบกวนชี้แนะด้วยนะครับ


https://github.com/arogachev/yii2-excel

ไม่อยากให้ใช้ excel เพราะถ้าในไฟล์มีหลาย sheet แล้วมีข้อมูลอื่นปะปน เช่น หัวข้อตาราง สรุป มันจะ error

ถ้าเป็น csv มันจะตรงจุดกว่า