私はCodeigniter WebアプリケーションにGoogleのreCAPTCHAを追加しようとしています。Codeigniter検証エラー:「あなたのフィールド名Captcha(recaptcha)に対応するエラーメッセージにアクセスできません」
しかし、私はこの問題に実行し続ける: Unable to access an error message corresponding to your field name Captcha. (recaptcha)
私はエラーをスローするようにフォームを送信しようと、$server_output['success']
は、このように$this->form_validation->set_message('recaptcha', 'Please redo the {field}.');
を実行FALSE
する必要がありますが、CodeIgniterのは、すべてのコールバック関数を実行しているようには見えません。 ..
検証は(タイトルのエラーメッセージに加えて)エラー出力として他のすべてのために働いている:
The Username field is required. The Password field is required. The Password Confirmation field is required. The Email field is required.
私は(スリムコントローラを保つための条約やモデルの脂肪以下)私のモデルを通じて検証を実行している:ここで
public function __construct()
{
parent::__construct();
$this->load->library('form_validation');
}
public function register_validation()
{
/*
* INITIALIZE FORM VALIDATION RULES
*/
$this->form_validation->set_rules('username', 'Username',
array(
// REMOVED FOR PRIVACY REASONS.
)
);
$this->form_validation->set_rules('password', 'Password',
array(
// REMOVED FOR PRIVACY REASONS.
)
);
$this->form_validation->set_rules('password_confirmation', 'Password Confirmation',
array(
// REMOVED FOR PRIVACY REASONS.
)
);
$this->form_validation->set_rules('email', 'Email',
array(
// REMOVED FOR PRIVACY REASONS.
)
);
/*
* SET CUSTOM VERIFICATION RULES:
* 1. GOOGLE RECAPTCHA WIDGET
*/
$this->form_validation->set_rules('g-recaptcha-response', 'Captcha', 'callback_recaptcha');
/*
* CHANGE ERROR MESSAGES FOR SOME RULES.
*/
$this->form_validation->set_message('is_unique', 'The {field} has already been taken!');
/*
* RUN VALIDATION,
* IF VALIDATION IS NOT PASSED --> RETURN FALSE.
*/
if ($this->form_validation->run() === FALSE)
return FALSE;
/*
* ELSE WHEN EVERYTHING PASSES VALIDATION AND RECAPTCHA,
* TRY TO CREATE NEW USER.
*/
else
{
/*
* TRY TO CREATE NEW USER.
*/
if ($this->create_user())
{
/*
* SET FLASHDATA TO ALERT USER THAT
* THE ACCOUNT HAS BEEN SUCCESSFULLY CREATED.
*/
$this->session->account_created = TRUE;
$this->session->mark_as_flash('account_created');
return TRUE;
}
else
{
/*
* THROW ERROR AND ALERT USER VIA FLASHDATA.
*/
$this->session->account_created = FALSE;
$this->session->mark_as_flash('account_created');
return FALSE;
}
}
}
は、同じクラス/モデルの私のreCAPTCHAのコールバック関数です:
/*
* RECAPTCHA FUNCTION
*/
public function recaptcha($data = '')
{
/*
* INITIALIZE VARIABLES.
*/
$google_api_url = 'https://www.google.com/recaptcha/api/siteverify';
$google_secret_key = 'REMOVED FOR PRIVACY REASONS';
$ip = $this->input->ip_address();
$response = $data;
/*
* INITIALIZE CURL.
*/
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $google_api_url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS,
http_build_query(array(
'secret' => $google_secret_key,
'response' => $response,
'remoteip' => $ip,
)
)
);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
/*
* RUN CURL.
*/
$server_output = curl_exec($curl);
curl_close($curl);
$server_output = json_decode($server_output, true);
/*
* CHECK RECAPTCHA SUCCESS
*/
if ($server_output['success'])
return TRUE;
else
{
$this->form_validation->set_message('recaptcha', 'Please redo the {field}.');
return FALSE;
}
}
私は何が間違っていますか?モデル内で検証を実行しているため動作しませんか? 2時間から3時間の間、このままになってしまった...コードが読めるといいと思う。
感謝〜
それでも同じエラー...フムを参照してください。 – radiantMemory
どのバージョン? –
CodeIgniterのどのバージョン?最新のもの。バージョン3.1.3 – radiantMemory