0
我决定让Yii验证码呈现随机颜色作为背景和前景,所以我对公共方法actions
进行了以下更改,其中SiteController
验证码将在actionContcat
视图中呈现。Yii Captcha Action随机更改颜色
class SiteController extends Controller
{
/**
* 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'=>$this->setRandColor('DARK'),
'foreColor'=>$this->setRandColor('LIGHT'),
),
// page action renders "static" pages stored under 'protected/views/site/pages'
// They can be accessed via: index.php?r=site/page&view=FileName
'page'=>array(
'class'=>'CViewAction',
),
);
}
...
在上面的代码我有做背景色和前景色键的值是一个私有方法setRandColor
的回报。以下是方法代码:
/**
* Generate random hexadecimal color code in format 0xXXXXXX according to type param
* which has only two values DARK and LIGHT
* @param string $type
*/
private function setRandColor($type='DARK')
{
$color = '0x';
$darks = array(0,1,3,4,5,6,7);
$lights = array(9,'A','B','C','D','E','F');
if ($type == 'DARK')
{
$chooseFrom = $darks;
}
else
{
$chooseFrom = $lights;
}
for ($i = 0; $i < 6; $i++)
{
$color .= $chooseFrom[array_rand($chooseFrom)];
}
return $color;
}
我已经测试setRandColor
单独。即在普通的PHP脚本,我发现它可以很好地返回十六进制代码。看看下面的演示:http://codepad.viper-7.com/OcCSjL
但是,当使用上述代码时,我只是得到一个黑色的验证码图像,没有任何错误消息。我需要知道为什么这个代码在我的Yii应用程序中不起作用?
请提供来自函数$ this-> setRandColor的示例输出 –