0

何が間違っているのかわからない場合は、ドキュメントを数回読み直してください。ただし、外部コントローラーからモデルを検証しようとしたのはこれだけです。無効なメールアドレスを使用している場合でも、検証が正常に行われたかのように処理されます。reCAPTCHAのみが機能します。どんな助けでも大歓迎です:

コントローラ内:

if(!$this->request->is('get'))
{
    App::import('Vendor','recaptchalib');
    $this->set('captchaContent' , recaptcha_get_html($this->publicKey));
    $resp = recaptcha_check_answer( $this->privateKey, 
        $_SERVER['REMOTE_ADDR'],
        $this->request->data['recaptcha_challenge_field'],
        $this->request->data['recaptcha_response_field']);          
    if (!$resp->is_valid) {
        $this->set('recaptcha_error','You did not enter the words correctly. Please try again.');
    } elseif($this->Support->validates($this->request->data)) {
        // send the message
    }
}

モデル内:

class Support extends AppModel
{
    public $name = 'Support';
    public $useTable = false;   
    public $validate = array(
        'email' => array('rule'=>'email','message'=>'You must enter a valid email')
        );
}

ビューで:

echo $this->Form->create('Support');
echo $this->Form->input('name');
echo $this->Form->input('email');
echo $this->Form->input('message',array('type'=>'textarea'));
echo '<div style="margin-left: 150px; margin-bottom: 10px;">'.$captchaContent.'</div>';
if($recaptcha_error) echo '<p style="color:red; margin-left: 150px;">'.$recaptcha_error.'</p>';
echo $this->Form->end('Send Message');
4

2 に答える 2

2

問題を見つけ、置く必要があります

$this->Support->set($this->request->data);

検証呼び出しの前に、明らかに、自身のモデルにアクセスしていないコントローラーは、これを明示的に設定する必要があります。とにかくありがとう :)

于 2013-03-19T23:40:33.083 に答える
0

代わりに、モデルでこれを試してください。

public $validate = array(
    'email' => array(
        'rule'    => array('email', true),
        'message' => 'Please supply a valid email address.'
    )
);

http://book.cakephp.org/2.0/en/models/data-validation.htmlから

于 2013-03-19T23:25:38.093 に答える