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, уважаемое сообщество!