1

私は最初の記事を書いたばかりなので、何か間違ったことをしたかどうか教えてください!私の問題:URLで指定されたデータを検証したい。

../Logs/requests?from=2011-10-18T16:15:00&to=2011-10-18T16:30:00&fmt=csv

モデルに追加されたルールで検証するオプションがあることがわかりました。

public $validate = array(
    'request_id' => array(
        'alphaNumeric' => array(
            'rule'     => 'alphaNumeric',
            'required' => true,
            'message'  => 'Alphabets and numbers only'
        ),
    )
);

コントローラで「ModelName->set($ params)」を使用し、その後「ModelName-> validates()」関数が有効かどうかにかかわらず、回答を提供する必要があります。私のソリューションとhttp://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.htmlのソリューションの唯一の違いは 、コントローラーがいくつかのモデルを使用していることです。応答のデータを収集します。問題は、「validates()」関数が、モデルルールによって署名された「無効」であるはずの特殊文字やその他のものを入力した場合でも、「有効」を返すだけであるということです。ヘルプ!

4

1 に答える 1

0

これは答えではありませんが、OPを支援するために追加されました。

私はあなたの状況をテストするためのテストコントローラー/モデルを作成しました。意図的に「AppController」/「AppModel」を拡張して、問題の原因となるコードを削除しませんでした。

私のテストモデル(app / Model / Some.php)

class Some extends Model
{
    public $name = 'Some';
    public $useTable = 'false';


    public $validate = array(
        'request_id' => array(
            'alphaNumeric' => array(
                'rule'     => 'alphaNumeric',
                'required' => true,
                'message'  => 'Alphabets and numbers only'
            ),
        )
    );
}

私のテストコントローラー(app / Controller / SomeController.php)

class SomeController extends Controller
{
    public $uses = array('Some');

    public function index()
    {
        $this->autoRender = false;

        $params = array('Some' => array('request_id'=>'4*G/&2'));
        $this->Some->set($params);
        $result = $this->Some->validates();
        debug($result);

        $params = array('Some' => array('request_id'=>'AAAA'));
        $this->Some->set($params);
        $result = $this->Some->validates();
        debug($result);

    }
}

出力:

\app\Controller\SomeController.php (line 32)
false
\app\Controller\SomeController.php (line 37)
true

このテスト設定は計画どおりに機能しているように見えるため、アプリケーションでこれらをテストして、問題の原因を絞り込むことができます。'beforeValidate()'コールバックを含み、request_idフィールドの検証を無効にする何らかの動作がAppModelにアタッチされている可能性がありますか?

于 2013-03-06T15:08:36.670 に答える