操作
Bug(バグ) #3486
未完了sfValidatorBase::isEmptyにfalseが渡された場合にtrueにならない
開始日:
2013-11-15
期日:
進捗率:
0%
予定工数:
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)
説明
概要¶
sfValidatorBase::isEmpty() に false が渡された場合に true にならない。
例えば opValidatorStirng では requried オプションが指定された場合には以下の箇所を通る。
if ($this->isEmpty($clean)) { if ($this->options['required']) { throw new sfValidatorError($this, 'required'); } return $this->getEmptyValue(); }
上記のコード中の $clean に対して false が渡された場合,if分岐がtrue判定されないため,この分岐自体が無視され,requriedオプションを指定していても例外が投げられない。
上記の問題は,具体的には以下のようなコードがあった場合に問題となる。
public function executeHoge(sfWebRequest $request) { $validator = new opValidatorString(array('required' => true)); $validator->clean($request['hoge']); }
上記のコードでパラメータとして hoge をもっていない(hogeの値がnullやfalseだということではなくhogeがセットされていない)場合, $request['hoge'] には false が入っているため,opValidatorString が例外を投げない。
上記のコードを$request->getParameter('hoge')と変更すると,この場合には null が渡されるため例外が throw される。
操作