匿名質問者

zendframework2の質問です


csvファイルでpostで受け取り
1行ごとにバリデーションをかけるところで
DBを調べてバリデーションをかけたいです。

コントローラ側は、以下のような実装で、

while ($data = $file->fgetcsv()) { // CSVファイルの1レコード

 ~中略~
 
$lineInputFilter->setData($data); // データをセット
if (!$lineInputFilter->isValid()) { // バリデーション

モデル側で以下のようになります。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/07/08 23:05:04
匿名質問者

質問者から

匿名質問者2014/07/01 23:50:49

use Zend\InputFilter\InputFilter;

use Zend\Db\Sql\Where;

class A extends InputFilter

{

public $originalData;

public function init()

{

$self = $this;

$where = new Where();

$where->equalTo('colA', $self->originalData[0])

->notEqualTo('colB', $self->originalData[1]);

$this->add(array(

'name' => 'colA',

'filters' => array(

array(

'name' => 'string_trim',

),

array(

'name' => 'null',

'options' => array(

'type' => 'string',

),

),

),

'validators' => array(

array(

'name' => 'dbnorecordexists',

'options' => array(

'message' => 'すでに登録されています',

'adapter' => $this->getDbAdapter(),

'table' => 'TABLE_A',

'field' => 'colA',

'exclude' => $where,

),

'break_chain_on_failure' => true,

),

),

));

public function setData($data)

{

$this->originalData = $data;

$keys = array(

'colA',

'colB',

);

$normalizedData = array();

foreach ($keys as $key) {

$normalizedData[$key] = array_shift($data);

}

parent::setData($normalizedData);

return $this;

}

上記の$where->equalToにある

$self->originalData[0]

$self->originalData[1]

を、CSVの1行毎に変化させたいのですが、

2行目、3行目も1行目の値のままになってしまいます。

2行目は2行目のデータを3行目は3行目のデータにするには

どのようにすればよいでしょうか。

回答0件)

回答はまだありません

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません