Php Yii验证码动作随机改变颜色

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(

我决定让Yii captcha为背景和前景呈现随机颜色,因此我对
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;
通过这种方式,我将类型从字符串转换为数字