После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

Продолжаю исследовать Yii2 :)

В качестве нового задания решил вынести контактную форму из Basic-установки в отдельный модуль.

Вроде что-то получается, но не отображается картинка капчи.

Картинка при этом имеет такой адрес:

Код: Выделить всё

/index.php?r=contacter%2Fsite%2Fcaptcha&v=58c3d325caaa8
то есть, браузер пытается ее там искать и не находит

В то время, как адрес самой контактной формы такой:

Код: Выделить всё

/index.php?r=contacter%2Fdefault%2Findex
то есть я просто сгенерил в gii модуль contacter, скопировал туда соответствующие участки кода из Basic-установки и поправил namespace.

Однако, этого оказалось недостаточно.

И да, я так понимаю, что в урле картинки не должно быть "site" :) но откуда оно там берется пока не понимаю )

Подскажите в какую сторону кода посмотреть?

Спасибо.
Matvik
Сообщения: 194
Зарегистрирован: 2013.06.21, 02:32

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение Matvik »

Я с капчой, чтоб не заморачиватся, всегда делаю action в соответствующем контроллере, и прямо указываю его в правиле валидации и в виджете.

Код: Выделить всё

public function actions()
    {
        return [
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
            ],
        ];
    }

Код: Выделить всё

['captcha', 'required'],
['captcha', 'captcha', 'captchaAction' => '/module/controller/captcha'],

Код: Выделить всё

<?= $form->field($model, 'captcha')->widget(\yii\captcha\Captcha::classname(), ['captchaAction' => ['/module/controller/captcha']]); ?>
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

Это для меня еще непонятнее :) я с Yii2 начал знакомиться совсем недавно.

У меня основной вопрос вот какой: почему перестала работать капча при переносе функционала в отдельный модуль?

Я понимаю что где-то надо поправить пути или еще чего. Но вот где именно?
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

...но сейчас попробую сделать как в примере :)
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение ElisDN »

romayii писал(а): 2017.03.11, 16:47 Я понимаю что где-то надо поправить пути или еще чего. Но вот где именно?
В указанных 'captchaAction'.
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

Смотрите, вот какой там виджет:

Код: Выделить всё

<?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [
          'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>',
          ]) ?>
Я так понимаю, в эту конструкцию как-то надо втиснуть теперь

Код: Выделить всё

['captchaAction' => ['/module/controller/captcha']]
но я не понимаю как именно.

И не понимаю, что это за квадратные скобочки такие? Это PHP вообще или что? :D Я просто не знаком с таким синтаксисом. Я знаю квадратные скобочки в массивах употребляют, но пожалуй и всё :)

2. Соответственно второй вопрос:

Код: Выделить всё

['captcha', 'required'],
['captcha', 'captcha', 'captchaAction' => '/module/controller/captcha'],
это откуда и чего вообще? И куда это разместить?
Matvik
Сообщения: 194
Зарегистрирован: 2013.06.21, 02:32

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение Matvik »

Код: Выделить всё

И не понимаю, что это за квадратные скобочки такие? Это PHP вообще или что? :D Я просто не знаком с таким синтаксисом. Я знаю квадратные скобочки в массивах употребляют, но пожалуй и всё :)
Вы не поверите...)
Это таки... масссив!
Таким образом передаются параметры - массивом. У вас уже есть параметр template. Теперь еще необходимо добавить параметр captchaAction в тот же массив.

Код: Выделить всё

это откуда и чего вообще? И куда это разместить?
Это правила валидации в модели, которая заполняется в форме.

Собственно, Вам нужно сначала прочитать документацию, хотя бы в разделе про модели, а тогда уже разбиратся с капчой и, тем более, делить на модули.
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

ага, вот, нашел как приткнуть эту строку:

Код: Выделить всё

<?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [
 'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>', 'captchaAction' => ['/module/controller/captcha']
 ]) ?>
итс вокинг!!! :D /по крайней мере картинка показывается теперь/
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

Matvik писал(а): 2017.03.11, 17:32 Вы не поверите...)
Это таки... масссив!
:D :D :D

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

Теперь я хотя бы примерно представляю что и зачем мне стоит прочесть.

Спасибо!
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

С кодом разобрался чего куда и как, картинка выводится, но теперь другая проблема:

- Код на картинке капчи не обновляется

то ли кэшируется, то ли еще чего, попробовал в двух браузерах - то же самое.

Что это может быть?
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

...при гуглении говорят что это типа нормально если код не введен, но код я ввожу, она говорит:

The verification code is incorrect.

и все равно картинка не меняется.
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

Выяснил, что при клике на картинку - она обновляется

но код почему-то не верифицирует :(

The verification code is incorrect.
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

В модели за проверку капчи отвечает эта строчка:

Код: Выделить всё

['verifyCode', 'captcha'],
если ее закоментить - форма уже работает ))

А если оставить - то она верную капчу - не принимает :(

Пробовал добавить две строки которые предложили выше:

Код: Выделить всё

['captcha', 'required'],
['captcha', 'captcha', 'captchaAction' => '/module/controller/captcha'], // менял на своё
не помогло

и по отдельности, и вместе добавлял...

что можно с этим сделать?
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

То есть сейчас проблема в том, что капча на любой код даже верный пишет:
The verification code is incorrect.
:(
Matvik
Сообщения: 194
Зарегистрирован: 2013.06.21, 02:32

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение Matvik »

Аджасковая валидация в форме присутствует?
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

Вот код модели формы - я его полностью скопировал из исходной модели (которая нормально работает), только нэймспейс поправил вверху и всё.

Код: Выделить всё

<?php

namespace app\modules\contacter\models; // мои правки

use Yii;
use yii\base\Model;

/**
 * ContactForm is the model behind the contact form.
 */
class ContactForm extends Model
{
    public $name;
    public $email;
    public $subject;
    public $body;
    public $verifyCode;


    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            // name, email, subject and body are required
            [['name', 'email', 'subject', 'body'], 'required'],
            // email has to be a valid email address
            ['email', 'email'],
            // verifyCode needs to be entered correctly
            ['verifyCode', 'captcha'],
        ];
    }

    /**
     * @return array customized attribute labels
     */
    public function attributeLabels()
    {
        return [
            'verifyCode' => 'Verification Code',
        ];
    }

    /**
     * Sends an email to the specified email address using the information collected by this model.
     * @param string $email the target email address
     * @return bool whether the model passes validation
     */
    public function contact($email)
    {
        if ($this->validate()) {
            Yii::$app->mailer->compose()
                ->setTo($email)
                ->setFrom([$this->email => $this->name])
                ->setSubject($this->subject)
                ->setTextBody($this->body)
                ->send();

            return true;
        }
        return false;
    }
}
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

Onotole писал(а): 2017.03.11, 21:30 Отключите аЯкс валидацию
А я ее в коде не вижу.

Или она не в модели?
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение Onotole »

romayii писал(а): 2017.03.12, 00:33
Onotole писал(а): 2017.03.11, 21:30 Отключите аЯкс валидацию
А я ее в коде не вижу.

Или она не в модели?
В форме
romayii
Сообщения: 70
Зарегистрирован: 2017.03.02, 11:00

Re: После вынесения Contact в отдельный модуль не работает Captcha (картинка не отображается)

Сообщение romayii »

я еще раз пересмотрел все файлы формы - там Ajax-валидация и не была включена.

то есть форма-то та же самая, что Basic-установке Yii2, просто я ее пытаюсь засунуть в отдельный модуль.

получилось всё, кроме капчи :(
Ответить