1. PHP / Говнокод #12100

    +49

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    if($model->validate(array('code')))
    {
    	$model->addError('code', 'Введен неверный код купона. Купон с таким кодом уже существует.');
    }
    else
    {
    	if($model->save())
    	{
    		$this->redirect(array('view','id'=>$model->id));
    	}
    }

    Запостил: sleeper, 12 Ноября 2012

    Комментарии (11) RSS

    • "Извините, Вы не можете использовать указанный пароль. Такой пароль уже использует пользователь Misha. Пожалуйста, придумайте другой пароль."
      Ответить
      • Но разве с купонами это не вполне закономерно?

        Если Миша уже ввел свой код со своего купона, и получил за него какие-нибудь бонусы, а я взял и ввел такой же номер, то эта ошибка вполне резонна.

        Это же не пароль, знание которого может пригодиться в дальнейшем...
        Ответить
      • При регистрации вы не можете использовать следующие пароли:

        пароль1 (пользователь1)
        пароль2 (пользователь2)
        ...
        парольN (пользовательN)
        Ответить
    • Coupon.
      Ответить
    • И никто не заметил главного: нарушения в логике.
      Ответить
      • Можно поподробнее?
        Ответить
        • ! в первой строке пропущено. Если только эта опечатка - то довольно уныло
          Ответить
          • Ну, тут еще неизвестно. Может, валидный идентификатор означает "существующий в базе", тогда все ок.
            Ответить
            • Вот и я о том же подумал. Нельзя методы называть validate(). Ну вернул он флажок, и что он значит? "Да, валидный"/"Нет, ошибок не обнаружено"?
              Гораздо разумнее назвать isValid().

              Не зная семантики этого конкретного validate(), сложно сказать, есть ошибка в логике или нет.
              Ответить
    • Исходя из того, что Я вижу это Yii, значит validate возвращает return !$this->hasErrors();

      Собсно $model->addError() и будет влиять на hasErrors(), но только до валидации.

      Логика сломана только потому, что save() и так врубит валидацию, т.е. должно быть так:

      if( !$model->save() )
      {
      // Делаем чего-нибудь, например логируем
      }
      else
      {
      $this->redirect( 'view', array( 'id'=>$model->id ) );

      В форме врубаем аякс при сабмите, в моделе делаем валидатор с этой ошибкой и получаем профит.
      Сообщения об ошибках будут ухадить аяксом в форму и ... ну короче Вы поняли.
      Ответить

    Добавить комментарий