Кастомизация каптчи в Zend Framework 2
6 min
Компонент Zend\Captcha может принимать различные формы, в том числе задавать логические вопросы, генерировать искаженные шрифты, и передавать несколько изображений, установив между ними связь. Zend\Captcha имеет целью обеспечить разнообразие серверных решений, которые могут быть использованы либо в автономном режиме либо в сочетании с Zend\Form компонентой.
Элемент Captcha имеет более одного поля, которые рендерятся друг за другом. Встроеный генератор изображений каптч (Zend\Captcha\Image.php) использует свой собственный хелпер (Zend\Form\View\Helper\Captcha\Image.php) для создания изображения. Так-же, в Zend\Captcha\Image.php находится метод 'getHelperName'. Этот метод передает имя хелпера для рендеринга изображения каптчи. По умолчанию 'getHelperName' передает 'captcha/image' — экземпляр класса Zend\Form\View\Helper\Captcha\Image.php. Если углубиться с помощью дебаггера, можно увидеть, что в свойстве экземпляра phpRenderer::__helpers, в invokablesClasses располагается хелпер 'captchaimage'. Это и есть Zend\Form\View\Helper\Captcha\Image.php, упомянутый ранее. Грубо говоря — вы просто создаете изображение, а всё остальное делает за вас рендерер используя хелпер, хотя такое положение вещей устраивает не всех.
Элемент Captcha имеет более одного поля, которые рендерятся друг за другом. Встроеный генератор изображений каптч (Zend\Captcha\Image.php) использует свой собственный хелпер (Zend\Form\View\Helper\Captcha\Image.php) для создания изображения. Так-же, в Zend\Captcha\Image.php находится метод 'getHelperName'. Этот метод передает имя хелпера для рендеринга изображения каптчи. По умолчанию 'getHelperName' передает 'captcha/image' — экземпляр класса Zend\Form\View\Helper\Captcha\Image.php. Если углубиться с помощью дебаггера, можно увидеть, что в свойстве экземпляра phpRenderer::__helpers, в invokablesClasses располагается хелпер 'captchaimage'. Это и есть Zend\Form\View\Helper\Captcha\Image.php, упомянутый ранее. Грубо говоря — вы просто создаете изображение, а всё остальное делает за вас рендерер используя хелпер, хотя такое положение вещей устраивает не всех.