人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

zendframework2の質問です

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

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

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

?中略?

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

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

●質問者: 匿名質問者
●カテゴリ:ウェブ制作
○ 状態 :キャンセル
└ 回答数 : 0/0件

▽最新の回答へ

質問者から

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.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ