Symfony капча ошибка перенаправления - PullRequest
0 голосов
/ 18 сентября 2010

Я создаю простой почтовый мейлер в symfony с помощью плагина sfExtraForm captcha. Все работает, за исключением того, что sfValidator не перенаправляет пользователя и показывает ошибку, когда любое поле недопустимо. Единственное, о чем я могу думать, это то, что я не генерировал модуль. Я построил его с нуля.

Я должен сделать перенаправление вручную. Это потому, что это sfForm, а не форма sfDoctrine? Это если строка if ($ form-> isValid ()) возвращает false, но без соответствующих кодов перенаправления и ошибок. Вот программа. Спасибо:

Форма:

<?php
class AdsForm extends sfForm
{ 
  public function configure()
  {
    $this->setWidgets(array(
      'name'   => new sfWidgetFormInputText(),
      'email' => new sfWidgetFormInputText(),
      'phone' => new sfWidgetFormInputText(),
       'fax' => new sfWidgetFormInputText(),
       'attention' => new sfWidgetFormInputText(),
       'message' => new sfWidgetFormInputText(),
       'captcha' => new sfWidgetFormReCaptcha( array('public_key'=>self::PUBLIC_KEY)),
    ));

    $this->widgetSchema->setNameFormat('ads[%s]');

    $this->setValidators(array(
      'name'   => new sfValidatorString(array('max_length' => 50)),
      'email' => new sfValidatorString(array('max_length' => 50)),
      'phone' => new sfValidatorString(array('max_length' => 50)),
      'fax' => new sfValidatorString(array('max_length' => 50)),
      'attention' => new sfValidatorString(array('max_length' => 50)),
      'message' => new sfValidatorString(array('max_length' => 255)),
      'captcha' => new sfValidatorReCaptcha(array('private_key' =>  self::PRIVATE_KEY))
    ));

    $this->widgetSchema->setLabels(array(
        'name'    => 'Your Name:*',
        'email'      => 'Your Email:*',
        'phone'   => 'Your Phone:*',
        'fax'   => 'Your Fax',
        'attention'   => 'Attention:*',
        'message'   => 'Mail Message:*',
        'captcha'   => 'Image Verification:*',
    ));
  }
}

Действие:

    class adsActions extends sfActions
{  
  public function executeIndex(sfWebRequest $request)
  {
      $this->form=new adsForm();
  }
  public function executeSend(sfWebRequest $request){

     $this->forward404Unless($request->isMethod(sfRequest::POST));


    $form=new adsForm();
    $captcha = array('recaptcha_challenge_field' => $request->getParameter('recaptcha_challenge_field'),'recaptcha_response_field'  => $request->getParameter('recaptcha_response_field'),);

    $form->bind(array_merge($request->getParameter('ads'), array('captcha' => $captcha)));
    if ($form->isValid())
    {
        print_r($_REQUEST);
        $ads=$this->getRequestParameter('ads');
        print_r($ads);
        $headers = 'From: '."\r\n" .
        'Reply-To: no-reply@yellowexplorer.com' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();
        //mail(' ******@yahoo.com','Yellow Explorer','An account has been created for you at yellowexplorer.com with a username of '.$this->username.'. Please click <a href="http://yellowexplorer.itecode.com/user/ConfirmRegistration?username='.$this->username.'&key='.$this->key.'">here</a> to finish creating your account.',$headers);
    }
    else{
        $this->redirect('/ads');
    }
  }
}

1 Ответ

0 голосов
/ 18 сентября 2010

Вы не видите никаких ошибок, потому что вы перенаправляете! Чтобы визуализировать поля формы с их ошибками, необходимо отобразить фактический экземпляр формы, с которым вы вызвали bind. Попробуйте изменить $this->redirect('/ads') на $this->setTemplate('index').

Другие потенциальные изменения (выходящие за рамки вопроса):

  • Вы можете применить требования к методу запроса для действия отправки на уровне маршрутизации. Сделайте маршрут отправки sfRequestRoute и добавьте требование { sf_method: post }.
  • Symfony имеет встроенную почтовую программу, sfMailer. По какой-то причине вы решили не использовать его?
...