Сегодня мне понадобилось так отредактировать капчу Zend_Captcha, чтобы выводились только цифры. В документации и API ничего подходящего я не нашёл, пришлось изучать исходники. В итоге пришёл к следующей строке:

1
Zend_Captcha_Word::$VN = Zend_Captcha_Word::$CN = range(0, 9);

Под катом – некоторые разъяснения про внутреннее устройство Zend_Captcha.

На момент написания этой заметки компонент Zend_Captcha содержит пять адаптеров:

  • Dumb
  • Figlet
  • Image
  • ReCaptcha
  • Word

Все они, за исключением ReCaptcha, являются подклассами Zend_Captcha_Word. Zend_Captcha_Word имеет следующие строки:

1
2
3
4
static $V  = array("a", "e", "i", "o", "u", "y");
static $VN = array("a", "e", "i", "o", "u", "y","2","3","4","5","6","7","8","9");
static $C  = array("b","c","d","f","g","h","j","k","m","n","p","q","r","s","t","u","v","w","x","z");
static $CN = array("b","c","d","f","g","h","j","k","m","n","p","q","r","s","t","u","v","w","x","z","2","3","4","5","6","7","8","9");

Как мы видим, статичные свойства хранят в себе наборы символов, используемые для формирования текста капчи. Различаются они вот чем:

$V
Согласные буквы
$VN
Согласные буквы и цифры
$C
Гласные буквы
$CN
Гласные буквы и цифры

В случае, если использование цифр разрешено, применяются свойства $VN и $CN, иначе – $V и $C. Разрешено ли использование цифр, определяет protected-свойство $_useNumbers, которое установлено в true и не имеет методов для изменения значения. Поэтому мы не берём в расчёт $V и $C – они не используются.
Таким образом, меняя значения свойств $VN и $CN, мы заменяем стандартные наборы символов нужными нам, т.е. цифрами.

3 Comments

  1. Дмитрий says:

    Спасибо, пригодилось.

  2. anderles says:

    Спасибо, еще как пригодилось. Нашел просвет в конце тунеля :)

Leave a Reply