2015-02-13 28 views
7

Ricevo l'ID azione CAPTCHA non valido Eccezione nel mio modulo contactus personalizzato. Sono riuscito a visualizzare il captcha ma la regola di validazione dei modelli lancia l'eccezione dell'ID azione non valida. Qui di seguito è il mio codice:Yii2 ID azione CAPTCHA non valido nel modulo

CONTACTUS/controller/DefaultController.php

class DefaultController extends Controller 
{ 
    public function behaviors() 
    { 
     return [ 
      'access' => [ 
       'class' => \yii\filters\AccessControl::className(), 
       'rules' => [ 
        [ 
         'actions' => ['captcha','index'], 
         'allow' => true, 
        ], 
       ] 
      ] 
     ]; 
    } 

    public function actions() 
    { 
     return [ 
      'error' => [ 
       'class' => 'yii\web\ErrorAction', 
      ], 
      'captcha' => [ 
       'class' => 'yii\captcha\CaptchaAction', 
       'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, 
      ], 
     ]; 
    } 

    public function actionIndex() 
    { 
     $model = new ContactForm(); 
     if ($model->load(Yii::$app->request->post()) && $model->contact(setting::ADMIN_EMAIL_ADDRESS)) { 
      Yii::$app->session->setFlash('contactFormSubmitted'); 

      return $this->refresh(); 
     } else { 
      return $this->render('index', [ 
       'model' => $model, 
      ]); 
     } 
    } 
} 

CONTACTUS/modelli/ContactForm.php

public function rules() 
{ 
    return [ 
     // name, email, subject and body are required 
     [['name', 'email', 'subject', 'body','verifyCode'], 'required'], 
     // email has to be a valid email address 
     ['email', 'email'], 
     // verifyCode needs to be entered correctly 
     ['verifyCode', 'captcha','captchaAction'=>'default/captcha'], 
    ]; 
} 

contactus/views/default/index.php

<?php $form = ActiveForm::begin(['id' => 'contact-form']); ?> 
      <?= $form->field($model, 'name') ?> 
      <?= $form->field($model, 'email') ?> 
      <?= $form->field($model, 'subject') ?> 
      <?= $form->field($model, 'body')->textArea(['rows' => 6]) ?> 
      <?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [ 
       'captchaAction' => 'default/captcha', 
       'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>', 
      ]) ?> 
      <div class="form-group"> 
       <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'contact-button']) ?> 
      </div> 
<?php ActiveForm::end(); ?> 

Viene visualizzato l'errore seguente:

Exception (Invalid Configuration) 'yii\base\InvalidConfigException' with message 'Invalid CAPTCHA action ID: default/captcha'in E:\wamp\www\yii-application\vendor\yiisoft\yii2\captcha\CaptchaValidator.php:81 

Mi manca qualcosa?

risposta

10

Si dovrebbe modificare la regola di convalida:

['verifyCode', 'captcha','captchaAction'=>'/contactus/default/captcha'],