2012-01-23 4 views
0

モデル内から配列を手動で検証しようとしていますが、配列に入力された無効なデータに関係なく、検証は成功します。

私は$のデータを検証しようとしています私のCustomerLocationモデルで:

$this->create(); 
$this->set($data); 
if (!$this->validates()){ 
    //some action if validation fails 
} 

この場合は$データは単純な配列である:

Array 
(
[location_number] => 125-Knoxville - M 
[packing_notes] => Test 
[packing_label_message] => packing message 
[length] => 4 
[width] => 4 
[height] => 4 
[weight] => 4 
[shipping_carrier] => UPS 
[shipping_service] => 2nd Day Air 
[ship_date] => 
[id] => 768 
[row] => 4 
) 

上記の$データが必要なのどれもが含まれていませんCustomerLocationモデルのフィールドは完全に検証に失敗するはずです。

この$ dataのソースは、インポートされた.csv行です。このモデルのベークドケーキフォームから検証すると、検証が機能します。

$ this-> validatesの$ data配列が正しくフォーマットされていませんか?そうであれば、私はそれが失敗するのではなく、失敗すると予想します。

ご了承ください。

$this->set(array('CustomerLocation' => $data)); 

CakePHPは妥当性を検証するためにどのモデル(複数可)を決定するために、配列の最初のレベルを使用しています。一見

+1

あなたの検証ルールは何ですか?私はあなたの間違いがあると確信しています – mark

+0

あなたの検証ルールを見ることなく、おそらく@markが得ている検証ルールに '必須'オプションを追加する必要があると推測しています。 http://book.cakephp.org/1.3/en/view/1145/One-Rule-Per-Field – Joep

答えて

0

は、私はあなたに$this->set($data);を変更する必要があると思います。

モデル名に一致するキーがない(つまり、LocationNumberまたはPackingNotesモデルがない)ため、検証規則が見つからないか、または適用されていません。

+0

悲しいことに、同じ結果ですが、あなたは$データが必要であると思っていますそのような構造になっている。とにかく、モデルから少なくとも私がそれに投げるデータは無視しているようです。 –

+1

@deizel:それは間違っています。あなたはモデルエイリアスが必要ありません。配列が平坦であれば、自動的に配列の平坦化が解除され、モデルエイリアスと親になります(モデルクラスの1132行を参照)。 – mark

1

それは私が持っているために必要と判明:各フィールドのバリデーションルールで

'required' => true 

notemptyルールは、Cakeがフォームから検証している場合にのみ適用されます。私は当初ルールを掲示しておくべきだった。誰かがそれを捕らえたと確信しています。

関連する問題