匿名質問者
匿名質問者匿名質問者とは「匿名質問」を利用して質問した質問者。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら

zendframework2の質問です


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

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

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

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

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

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/07/01 23:00:15
  • 終了: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件)

回答はまだありません

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません