我正在尝试让Symfony 2 Controller从JPGraph生成图表。我遇到的问题是让Symfony和JPGraph可靠地协同工作。
我制作了我的控制器,并确保我进入了该功能,但我无法将图形输出到浏览器中。我在使用image / jpeg标题的时候尝试了$ graph-> Stroke(),但它会产生一个空白页面。我也尝试使用Twig并将我的图形对象传递给模板,并调用graph.Stroke,但是看起来Twig没有正确解析这个因为图像没有出现(我在img上使用了base 64编码) src,它仍然没有图像。)
最后,我试过
return $graph->Stroke()
和
return new Response($graph->Stroke());
但两者也只是导致了一个空白页面。我会在早上回到工作岗位时提供任何人认为需要的任何来源,我只是希望没有来源,有人可以指导我如何让Symfony和JPGraph以我想要的方式互动
更新
以下是我试图将其作为演示/学习练习来运行以使两者协同工作的来源。
<?php //
namespace Bundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
$JPGraphSrc = 'JPGraph/src';
require_once ($JPGraphSrc.'/jpgraph.php');
require_once ($JPGraphSrc.'/jpgraph_line.php');
require_once ($JPGraphSrc.'/jpgraph_bar.php');
require_once ($JPGraphSrc.'/jpgraph_date.php');
class GraphingController extends Controller
{
public function createGraphAction(Request $request) {
$this->getResponse()->setContent('image/jpeg');
// Some data
$ydata = array(11,3,8,12,5,1,9,13,5,7);
// Create the graph. These two calls are always required
$graph = new Graph(350,250);
$graph->SetScale('textlin');
// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot->SetColor('blue');
// Add the plot to the graph
$graph->Add($lineplot);
// Display the graph
$graph->Stroke();
return sfView::NONE;
}
}
答案 0 :(得分:1)
在努力的同时,我设法找到了解决方案。它非常简单,允许对正在发生的事情进行大量控制,并将所有内容保存在Symfony框架中。
首先,应该是
new \Graph(350, 250);
和
new \LinePlot();
没有\,Symfony认为它是它的框架的一部分而不是像我一样包含的库。
为了让图像实际显示,除了修复上述内容之外,我必须在控制器中执行以下操作:
// Display the graph
$gdImgHandler = $graph->Stroke(_IMG_HANDLER);
//Start buffering
ob_start();
//Print the data stream to the buffer
$graph->img->Stream();
//Get the conents of the buffer
$image_data = ob_get_contents();
//Stop the buffer/clear it.
ob_end_clean();
//Set the variable equal to the base 64 encoded value of the stream.
//This gets passed to the browser and displayed.
$image = base64_encode($image_data);
$redirect = $this->render('Bundle:Folder:file.html.twig', array(
'EncodedImage' => $image,
));
return $redirect;
然后在Twig里面:
<img src="data:image/png;base64, {{ EncodedImage }}" />