Убогая офф.документация: Captcha

Всем привет!

Хотелось бы открыть цикл “статей” на тему “Какая же убогая оффициальная документация по ентаму фреймворку” :)

И поднять в данной статье следующую тему: Каптча.

Про то как создать это чудо и куда его прикрепить, шоп оно работало написано много однобокого мусора, в данном манускрипте покажу как работать с капчей если она у вас участвует в работе во многих контроллерах, итакс:

  1. Определяем КаптчаЭкшенс.

КаптчаЭкшенс может быть только один на все приложение, иначе нифика не валидируется (почему об этом не написать в офф.документации - ума не приложу).

Выбераем контроллер куда мы этот экшенс всунем. Я всунул в SiteController (где этот экшенс, сопствинно, и был по дефолту).

/**

 * Declares class-based actions.


 */


public function actions()


{


	return array(


		// captcha action renders the CAPTCHA image displayed on the contact page


		'captcha'=>array(


			'class'=>'CCaptchaAction',


			'backColor'=>0xFFFFFF,


		),

  1. Апдейтим модель, валидирующую форму с каптчей

public $verifyCode;

public function rules() {

array(‘verifyCode’, ‘captcha’, ‘allowEmpty’ => !extension_loaded(‘gd’), ‘captchaAction’ => ‘site/captcha’),

Выделенный жирным фрагмент кода - очень важен, поскольку указывает где находиться СиКаптчаВалидатор.Экшенс :)

  1. Правим форму

Включаем эту хрень: ‘enableAjaxValidation’=>true, - если хотим аяксовую валидацию

Добавляем стандартную шнягу:

<?php if (extension_loaded(‘gd’)) {?>

&lt;div class=&quot;row&quot;&gt;


	&lt;?php echo &#036;form-&gt;labelEx(&#036;model, 'verifyCode');?&gt;


	&lt;div&gt;


		&lt;?php &#036;this-&gt;widget('CCaptcha', [b]array('captchaAction' =&gt; 'site/captcha')[/b]);?&gt;


		&lt;?php echo &#036;form-&gt;textField(&#036;model, 'verifyCode');?&gt;


	&lt;/div&gt;


	[b]&lt;?php echo &#036;form-&gt;error(&#036;model, 'verifyCode');?&gt;[/b]


&lt;/div&gt;


&lt;?php }?&gt;

Выделено жирный 1 - важный кусок кода, указывает каптче, где находиться СиКаптчаЭкшенс

Выделено жирным 2 - важный участок кода, демонстрируем ризалты юзерских попыток угадать каптчу

Также, в вызове формы, в которой участвует каптча, можно указать Экшенс, задача которого будет отвалидировать поступающие данные… если экшенс не указан запросы идут в то место, из которого эта форма была зарендерина

Все спасибо за внимание

и побольше хороших каптч

вам наверное к Александру Макарову нужно обращаться (samdark) и, соответственно, на http://www.yiiframework.ru/ писать рецепты (+ я бы, на вашем месте более аккуратно выбирал слова по поводу описания качества документации, потому как людей ДО ВАС все в принципе устраивало :rolleyes:, так что, прежде всего попробуйте поискать их в себе)

Уж лучше обходиться API Reference, чем читать в таком изложении ("нифика", "Включаем эту хрень" и прочее).

Фреймворк разрабатывают добровольцы. Если вы хотите помочь - пишите нормальные статьи в cookbook на русском или на английском. Если вы хотите, чтобы помогли вам - обращайтесь на форум, но по существу и без эмоций.

Да Вы правы, конечно… просто это была ирония, последствия 2-х часового врывания в исходные материалы сего чудофреймворка почемуж не фунциклирует каптча…

:lol:

Можно было отписаться на форуме, вам бы помогли за 10-30 минут, если не желали тратить свое время :rolleyes:

Побольше How to конечно не помешало бы. Но в общем все понятно даже для меня как абсолютного новичка в программировании. Просто над некоторыми моментами приходится размышлять более 2 часов. :rolleyes:

Во всем надо видеть плюсы :) Порой, именно такие размышления и делают из человека читающего человка думающего, размышляющего и способного самостоятельно находить пути решения.

Конечно, во всем надо знать меру, но я считаю, что документация к Yii достаточна, чтобы без труда освоить азы и, если что-то покажется непонятным, задать конкретный вопрос на форуме. Иногда достаточно просто посмотреть в исходные коды.

P.S. Не думайте, что я против статей по Yii и рецептов в Cookbook. Я обеими руками ЗА :)

Да автор красавчик, всё правильно написал и правильным языком.

Те кто придираются - вы бы к сути написанного придирались, а не к словам. А суть такова, что много нюансов реально не указано. От примеров в доке шаг влево-вправо, уже ничего не работает, приходится колдовать.

Я, например, сейчас пытаюсь использовать каптчу вместе с форм билдером и моделями таблиц. Уже прошёл час, код так и не работает, нервы здают, создал тему - http://www.yiiframework.com/forum/index.php?/topic/13136-fatal-error-when-adding-captcha-with-form-builder/

Но почему-то мне кажется, что вменяемого ответа я не получу ни за 10 минут, ни за 30, ни за день.

По поводу документация, она вводная, если указывать все нюансы она станет слишком большой.

Всё необходимое найти можно class reference и в коде, open source как никак.

Вы разработчик или кто? Кнопки "сделать всё заебись" не бывает.

Вы ни кто ничем не обязан, вы сами решили использовать инструмент, кто ж виноват что пользоваться им не умеете?

Какая бы документауия не была б всегда есть место где можно запнуться. И вот автор запнулся на капче, хотя это могло быть все что угодно, и с радосным криком высколил на улицу, сообщить этому миру что он иследовав его нашел в нем несовершенство, и тепер грамогласно об этом несовершенстве сообщает. Ура.

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

Спасибо автору темы, как раз встрял с капчей. После прочтения поста - все разрешилось!

Cпасибо, помогло. Если будет тема "убогая документация", хотя я не голосую за ТАКОЕ название - буду постоянным читателем)

А что, хорошое название, т.к. если вся документация будет в таком стиле, то название оправдает себя :) Ведь я надеюсь, вы это не про официальную документацию Yii? :)

А если у меня имеются модули, как тогда быть?

‘captchaAction’ => 'modulename/controllerId/captcha не прокатило. Капча тогда стучится по адресу modulename/controllerId. То бишь отсекает последнее значение…

Создать свой класс капчи унаследовав его CCaptcha и перекрыв метод renderImage();

Там строку




$url=$this->getController()->createUrl($this->captchaAction,array('v'=>uniqid()));



Нужно заменить на




$url = Yii::app()->createUrl($this->captchaAction,array('v'=>uniqid()));



Примерно так.

"Аффтару зачот адназначна!"

Если бы не литературный стиль "УпейсяАпСтену"- вышла бы отличная статья-док…

+1 :rolleyes: