Посему на коленке сделал расширение, которое:
- Работает при выключенном JS;
- Поддерживает несколько виджетов на странице;
- Работает с API через библиотеку от Google.
Предложения по улучшению приветствуются.
Спасибо, об этом думал уже. Такая реализация, через компонент, потому что надо было в резком темпе сделать что то работающее.anton_z писал(а): ↑2017.02.08, 03:03 Для ключа API лучше не делать компонент и не привязываться к конкретному названию Yii::$app->recaptcha. А запрашивать ключи в конструкторах валидатора и виджета и внедрять их через контейнер используя callback. Ну или сделать объект с конфигурацией и внедрять его, зарегистрировав в контейнере.
Спасибо, думаю тоже будет не лишним.
Было бы не плохо, конечно присылайте)
при вызове из:PHP Warning – yii\base\ErrorException
Invalid argument supplied for foreach()
Код: Выделить всё
2. in C:\WebServers\home\site.local\common\config\main.php at line 164 – yii\base\Object::__construct('config' => '', 1 => '', 2 => '')
158159160161162163164165166167168169170
],
],
],
'container' => [
'definitions' => [
\brussens\yii2\extensions\recaptcha\Widget::class => function($container, $params, $config) {
return new \brussens\yii2\extensions\recaptcha\Widget('***************************', \Yii::$app->language, $config);
}
],
'singletons' => [
\ReCaptcha\ReCaptcha::class => function($container, $params, $config) {
return new \ReCaptcha\ReCaptcha('*******************************');
Было бы прекрасно, если бы описали, как появилась ошибка (фрагменты подключаемого кода и т.п.).
Код: Выделить всё
'container' => [
'definitions' => [
\brussens\yii2\extensions\recaptcha\Widget::class => function($container, $params, $config) {
return new \brussens\yii2\extensions\recaptcha\Widget('********************', \Yii::$app->language, $config);
}
],
'singletons' => [
\ReCaptcha\ReCaptcha::class => function($container, $params, $config) {
return new \ReCaptcha\ReCaptcha('***********************');
}
]
],
Код: Выделить всё
class CallBack extends Model
Код: Выделить всё
class ContactUs extends Model
Код: Выделить всё
/**
* for captcha
*
* @var string
*/
public $verifyCode;
Код: Выделить всё
use brussens\yii2\extensions\recaptcha\Validator as ReCaptcha;
public function rules()
{
return [
[
[
'phone',
'message',
],
'required',
],
[['phone'], 'string', 'length' => 12],
[['message'], 'string'],
['verifyCode', ReCaptcha::className()],
[
[
'message',
'phone',
],
'safe',
],
];
}
Код: Выделить всё
<?php
?>
<?=\common\widgets\Feedback::widget();?>
Код: Выделить всё
use brussens\yii2\extensions\recaptcha\Widget as ReCaptcha;
<?=$form->field($contactUs, 'verifyCode')->widget(ReCaptcha::className(), [
'options' => [
'id' => 'insert-unique-widget-id-1',
],
]);?>
Код: Выделить всё
/**
* Configures an object with the initial property values.
* @param object $object the object to be configured
* @param array $properties the property initial values given in terms of name-value pairs.
* @return object the object itself
*/
public static function configure($object, $properties)
{
foreach ($properties as $name => $value) {
$object->$name = $value;
}
return $object;
}
а неphp composer.phar require --prefer-dist brussens/yii2-recaptcha "@dev"
потому как после обновления до актуальной версии все заработало.php composer.phar require --prefer-dist brussens/yii2-recaptcha "*"
Да, именно из-за того, что релиз по другому немного работает. Немного допилю и тогда уже сделаю релиз, пока надо убедиться, что всё будет работать, как надо.
Yii 2.0.12PHP Warning – yii\base\ErrorException
Invalid argument supplied for foreach()
\yii\BaseYii::configure at 528
Как именно делаете? Вот прям всё в точности, как в инструкции? Если так, то ошибки не должно быть. Код свой покажитеakkman писал(а): ↑2017.09.18, 09:29 Всем привет, пытаюсь установить, делаю все по инструкции, но выдает ошибку:
Yii 2.0.12PHP Warning – yii\base\ErrorException
Invalid argument supplied for foreach()
\yii\BaseYii::configure at 528
PHP 7.1.0
Yii2-recaptcha 1.0.0
bootstrap:
Код: Выделить всё
<?php
namespace app\bootstrap;
use brussens\yii2\extensions\recaptcha\Widget;
use ReCaptcha\ReCaptcha;
use yii\base\BootstrapInterface;
use Yii;
class ReqBootstrap implements BootstrapInterface
{
public function bootstrap($app)
{
$container = Yii::$container;
$container->setSingleton(ReCaptcha::class, function($container)
{
return new ReCaptcha(RECAPTCHA_SECRET);
});
$container->set(Widget::class, function($container, $params, $config)
{
return new Widget(RECAPTCHA_KEY, Yii::$app->language, $config);
});
}
}
Код: Выделить всё
<?php
namespace app\req\forms;
use app\req\ReqModel;
use brussens\yii2\extensions\recaptcha\Validator;
class test extends ReqModel
{
public $verifyCode;
public function rules()
{
return [
['verifyCode', Validator::className()]
];
}
}
Код: Выделить всё
use yii\base\Model;
class ReqModel extends Model
Код: Выделить всё
<?= $form->field($model, 'verifyCode')
->widget(\brussens\yii2\extensions\recaptcha\Widget::className()) ?>
Проблема решилась, после того как взял файл Widget.php с ветки `master`
Код: Выделить всё
__construct($siteKey, $language, $config = [])
Пока что не хватает времени допилить, что бы релизнуть. Постараюсь как можно быстрее запилить релиз.akkman писал(а): ↑2017.09.18, 19:04 Проблема решилась, после того как взял файл Widget.php с ветки `master`
в релизе в файле Widget.php отсутствовал конструкторupdate: валидация тоже работала некорректно, заработала после того, как заменил файл Validator.php из ветки `master`Код: Выделить всё
__construct($siteKey, $language, $config = [])