在Symfony 3.4

时间:2018-03-20 19:43:16

标签: symfony

我在symfony 3.4中的控制器上有一个动作,它返回一个用文本创建的图像,问题是当我在浏览器中看到图像时你看到一个没有任何东西的小白色方块,我没有收到任何类型的错误

代码:

<?php

namespace Programas\Bundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class CaptchaController extends Controller
{
    public function indexAction()
    {
        $response = new Response();
        $response->headers->set('Content-Type', 'image/png');

        #

        $word = "";

        $image = imagecreatetruecolor(500, 500);

        $background_color = imagecolorallocate($image, 255, 255, 255);  
        imagefilledrectangle($image,0,0,200,50,$background_color);

        $line_color = imagecolorallocate($image, 64,64,64); 
        for($i=0;$i<10;$i++) {
            imageline($image,0,rand()%50,200,rand()%50,$line_color);
        }

        $pixel_color = imagecolorallocate($image, 0,0,255);
        for($i=0;$i<1000;$i++) {
            imagesetpixel($image,rand()%200,rand()%50,$pixel_color);
        }  

        $letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
        $len = strlen($letters);
        $letter = $letters[rand(0, $len-1)];

        $text_color = imagecolorallocate($image, 0,0,0);

        for ($i = 0; $i< 6;$i++) {
            $letter = $letters[rand(0, $len-1)];
            imagestring($image, 5,  5+($i*30), 20, $letter, $text_color);
            $word.=$letter;
        }

        ImagePng($image);

        #

        ob_start();

        imagepng($image);

        $imagevariable = ob_get_contents(); 

        ob_end_clean(); 

        ImageDestroy($image);

        $response->setContent($imagevariable); 

        return $response;
    }
}

如何正确显示图像的显示?

1 个答案:

答案 0 :(得分:0)

使用验证码捆绑包并在表单类型中使用“验证码”更容易也更好。

https://github.com/Gregwar/CaptchaBundle

然后您可以像$builder->add('captcha', CaptchaType::class);

一样使用它

我确信还有其他一些好的捆绑包但你尝试的并不是最好的方法。通常,您必须扩展表单生成器并呈现验证码字段。你可以看看它们如何解决它。