Php Yii验证码动作随机改变颜色
我决定让Yii captcha为背景和前景呈现随机颜色,因此我对Php Yii验证码动作随机改变颜色,php,arrays,yii,Php,Arrays,Yii,我决定让Yii captcha为背景和前景呈现随机颜色,因此我对SiteController中的公共方法actions进行了以下更改,其中将在actionContcat视图中呈现captcha class SiteController extends Controller { /** * Declares class-based actions. */ public function actions() { return array(
SiteController
中的公共方法actions
进行了以下更改,其中将在actionContcat
视图中呈现captcha
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',
),
);
}
...
在上面的代码中,我将backColor和foreColor键的值设置为私有方法的返回值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;
}
/**
*根据类型参数生成格式为0xXXXXXX的随机十六进制颜色代码
*它只有两个值黑暗和光明
*@param字符串$type
*/
私有函数setRandColor($type='DARK')
{
$color='0x';
$darks=数组(0,1,3,4,5,6,7);
$lights=数组(9,'A','B','C','D','E','F');
如果($type=='DARK')
{
$chooseFrom=$darks;
}
其他的
{
$chooseFrom=$lights;
}
对于($i=0;$i<6;$i++)
{
$color.=$chooseFrom[array_rand($chooseFrom)];
}
返回$color;
}
我已经单独测试了setRandColor
。i、 我发现返回十六进制代码很好。请看以下演示:
然而,当使用上面描述的代码时,我只得到一个黑色的captcha图像,没有任何错误消息。我需要知道为什么此代码在我的Yii应用程序中不起作用?我刚刚发现了问题。问题在于
setRandColor
方法返回值的类型。该方法返回字符串值,而captcha数组需要十六进制值
我通过修改setRandColor
的最后一行解决了这个问题,它在该行中返回如下值:
return $color/1;
通过这种方式,我将类型从字符串转换为数字