Yii CAPTCHA url не работает

Я хочу создать форму регистрации AJAX на моем Yii-проекте. Поэтому на каждой странице у меня есть кнопка входа в систему, которая показывает всплывающее окно, если пользователь не авторизован. В этом всплывающем окне он может видеть форму регистрации с полем электронной почты, паролем и CAPTCHA (по умолчанию Yii captcha).

Итак, моя модель для регистрации пользователя - Пользователь. Существует правило проверки:

array('code', 'captcha', 'allowEmpty'=>!Yii::app()->user->isGuest),

Мой контроллер, где все действия пользователя, это Пользователь (url: site.url/user/), и я добавил туда действие captcha:

'captcha'=>array(
    'class'=>'CCaptchaAction',
    'backColor'=>0xFFFFFF,
    'foreColor'=>0x000000,
),

В моем следующем коде:

$this->widget('CCaptcha', array(
    'clickableImage'    => true,
    'showRefreshButton' => false,
))

И вот проблема:(Находясь внутри всплывающего окна, которое может быть показано на каждой странице (например, индексная страница, которая принадлежит главному контроллеру), captcha хочет загрузить изображение с этого контроллера (из /main/captcha, а не / user / CAPTCHA,).

Добавление капчи в каждый контроллер - плохая идея, поэтому я добавил

'captchaAction' => '/user/captcha',

Но после этого капча хочет загрузить с URL

http://site.loc/user/captcha/v/4fe99aca1bbed

Сбойная капча удобного для пользователя URL, и я не могу избежать этого (как я думаю, не будучи экспертом по yii, это из-за общего path-config).

Есть ли простое решение, чтобы решить эту проблему? Должен ли я восстановить URL или перенастроить CAPTCHA?

1 ответ

Решение

Итак, пока я ждал помощи, я решил проблему сам:) В своем проекте я разделил свои контроллеры на следующую иерархию:

/frontend
/backend

Все контроллеры для обычных пользователей находятся (конечно) в разделе Frontend, включая UserController и MainController.

Да, я написал несколько конфигов, чтобы скрыть /frontend/ в URL, как это:

'<c:\w+>/<a:\w+>' => 'frontend/<c>/<a>',

И я был уверен, что строка в моем конфиге CAPTCHA ('captchaAction' => '/user/captcha') знает, куда идти (и это было почти так!), Но НЕТ!

Я должен написать FULL PATH своему контроллеру и выполнить действие, как показано ниже:

'captchaAction' => '/frontend/main/captcha',

Как я уже говорил, я поместил свое действие CAPTCHA в UserController, но теперь вы можете видеть, что оно находится в MainController (я удалил его из UserController)

И я получил ошибку:

CCaptchaValidator.action "captcha" is invalid. Unable to find such an action in the current controller. 

Итак, чтобы решить эту проблему, мне просто нужно было использовать свойство captchaAction для CCaptchaValidator в моей пользовательской модели! Код:

array('code', 'captcha', 'captchaAction'=>'/frontend/main/captcha', 'allowEmpty'=>!Yii::app()->user->isGuest)

Итак, теперь моя проверка AJAX Captcha работает правильно, где я хочу.

Удачи с CIPTCHA по умолчанию в Yii, уважаемое сообщество!

Другие вопросы по тегам