Symfony1.4で、ファイル(CSV)アップロードのサンプル

2013年2月16日 オフ 投稿者: KYO
Table of Contents

Symfony1.4環境で、ファイル(CSV)のアップロード環境を構築することがあったので、そのメモ。
実際には、CSVからDBのCRUDを行った。

では、早速サンプルソース

  • vim lib/form/myFileUpload.class.php
    [php]
    widgetSchema[‘csv’] = new sfWidgetFormInputFIle(array(
    ‘label’ => ‘アップロード’
    ));
    // label
    $this->widgetSchema->setNameFormat(‘file[%s]’);

    // post validator
    $this->validatorSchema[‘csv’] = new sfValidatorFile(
    array(
    ‘required’ => false,
    ‘path’ => ‘uploads/’,
    ‘mime_types’ => array(‘text/plain’),
    ));
    }
    }
    [/php]

    – vim apps/frontend/modules/user/templates/listSuccess.php
    [php]
    hasFlash(‘error’)) : ?>

getFlash(‘error’) ?>


[/php]

  • vim apps/frontend/modules/user/actions/actions.class.php
    [php]
    public function executeUpload(sfWebRequest $request)
    {

    if ($request->isMethod('post')) {
        // フォームインスタンス生成後、bind
        $form = new myFileUploadForm();
        $form->bind($request->getParameter($form->getName()), $request->getFiles('file'));
    
        // validチェック
        if ($form->isValid()) {
            $file = $form->getValue('csv');
            $filepath = 'uploads/'. $file->getOriginalName();
    
            if ($file->getOriginalName() == 'user.csv') {
    
                // ファイル保存
                $file->save($filepath);
    
                // csvファイルから、レコード更新&追加
                ....
            } else {
                $this->getUser()->setFlash('error', 'アップロードするファイルは、"user.csv"としてアップロードしてください');
                $this->redirect('user/list');
            }
        }
    
        $this->redirect('user/list');
    }
    

    }
    [/php]

と、こんな感じで実装。
アップロード用ディレクトリのパーミッションを、書き込み可能にしておけば完了。
案外情報が少なかったので、コードを掲載してみた。
実運用では、ファイルサイズやCSVの各カラム、Validateチェックなどもあるのでこれだけでは終わらないけれど…