2016-12-30 3 views
0

こんにちは私はcsvファイルのデータを取得し、そのデータを私のビューに表示しようとしています。私はcsvファイルなど、すべてのデータを取得していますZend Framework 2 - 警告:SplFileObject :: setCsvControl():エスケープは文字でなければなりません

public function indexAction() 
    { 
     $delimiter = ','; 
     $enclosure = '""'; 
     $escape = '//'; 
     $filename = 'data' . DIRECTORY_SEPARATOR . 'csv' . DIRECTORY_SEPARATOR . 'StoreDepartment.csv';; 
     $this->file = new SplFileObject($filename); 
     $this->file->setFlags(SplFileObject::READ_CSV | SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE); 

     $this->file->setCsvControl($delimiter, $enclosure, $escape); 
     $this->useFirstRecordAsHeader = true; 

     $response = $this->getResponse(); 
     $headers = $response->getHeaders(); 
     $headers->addHeaderLine('Content-Type', 'text/csv'); 
     $contents = $this->file->fread($this->file->getSize()); 
     $response->setContent($contents); 
     $views = new ViewModel(array('text'=>$response)); 
     return $views;  
    } 

以下は私のコントローラ機能です。しかし、私は警告の下に取得しています:

警告:SplFileObject :: setCsvControl():また、私はJSONまたはArray形式にこのデータを変換したいエスケープが

文字でなければならないことは、それは可能ですか?

主な概念は、このデータを自分のデータベーステーブルに保存することです。どのフォーマットがデータベースにデータを格納するのに適していますか?助けてください

両方のエラーを解決するにはどうすればよいですか?

答えて

1

警告は、$エスケープ変数が2文字ではないためです。

$escape = '/'; 

または

$escape = "//"; 

あなただけの二重引用符を使用するときにバックスラッシュをエスケープする必要があるため。

データベースに保存する方法に関するご質問はこちら。あなたが何をする必要があるのか​​、どのようなデータがCSVにあるのかを知らなくても、言うことは非常に難しいです。しかし、CSV列とデータベース列の間に1対1のマッピングを持たせることをお勧めします。必要なテーブルの数は実際にデータとユースケースに依存しますが、まだ生データを保存したいかもしれないいくつかの状況がありますが、さらに多くの情報が必要とされ、依然として与えられた有望な答えになります。

+0

私は$ escape = '//'を変更しました。 〜へのエスケープ= '/'; 1つは動作していませんが、それでも同じエラーが発生します。手伝っていただけませんか ? –

関連する問題