Symfony1.4で、ファイル(CSV)アップロードのサンプル
2013年2月16日Symfony1.4環境で、ファイル(CSV)のアップロード環境を構築することがあったので、そのメモ。
実際には、CSVからDBのCRUDを行った。
では、早速サンプルソース
- vim lib/form/myFileUpload.class.php
<?php class myFileUploadForm extends sfForm { public function configure() { // widget $this->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'), )); } }
- vim apps/frontend/modules/user/templates/listSuccess.php
<?php if ($sf_user->hasFlash('error')) : ?></li> </ul> <div class="error_list"><?php echo $sf_user->getFlash('error') ?></div> <?php endif ?> <form action="<?php echo url_for('user/upload') ?>" method="post" enctype="multipart/form-data" > <?php echo $form ?> <input type="submit" value="CSVアップロード"> </form>
- vim apps/frontend/modules/user/actions/actions.class.php
public function executeUpload(sfWebRequest $request) { <pre><code>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'); } </code></pre> }
と、こんな感じで実装。
アップロード用ディレクトリのパーミッションを、書き込み可能にしておけば完了。
案外情報が少なかったので、コードを掲載してみた。
実運用では、ファイルサイズやCSVの各カラム、Validateチェックなどもあるのでこれだけでは終わらないけれど… - vim apps/frontend/modules/user/actions/actions.class.php