Php 将D3.js与symfony2一起使用

Php 将D3.js与symfony2一起使用,php,mysql,symfony,d3.js,twig,Php,Mysql,Symfony,D3.js,Twig,我刚开始学习php几个星期,现在我使用Symfony2作为一个框架。所以,我对Symfony的使用知之甚少 我现在要做的是,我想实现这个D3,但不是使用普通的php,而是使用Symfony 那么,我到现在为止所做的是: 创建了一个名为“homedb”的数据库,我完全按照教程所做的那样填充它 管理将symfony与数据库连接(在parameters.yml中修改) 创建了一个新的bundle调用TreeBundle 创建了一个名为DataController的控制器以从数据库中获取数据 创建了一个

我刚开始学习php几个星期,现在我使用Symfony2作为一个框架。所以,我对Symfony的使用知之甚少

我现在要做的是,我想实现这个D3,但不是使用普通的php,而是使用Symfony

那么,我到现在为止所做的是:

  • 创建了一个名为“homedb”的数据库,我完全按照教程所做的那样填充它
  • 管理将symfony与数据库连接(在parameters.yml中修改)
  • 创建了一个新的bundle调用TreeBundle
  • 创建了一个名为DataController的控制器以从数据库中获取数据
  • 创建了一个html.twig文件来显示数据
  • 我转换了这个文件:data.php

    <?php
        $username = "homedbuser"; 
            $password = "homedbuser";   
            $host = "localhost";
        $database="homedb";
    
        $server = mysql_connect($host, $username, $password);
        $connection = mysql_select_db($database, $server);
    
        $myquery = "SELECT  `date`, `close` FROM  `data2`";
    
        $query = mysql_query($myquery);   
        if ( ! $query ) {
            echo mysql_error();
            die;
        }
    
        $data = array();
    
        for ($x = 0; $x < mysql_num_rows($query); $x++) {
            $data[] = mysql_fetch_assoc($query);
        }
    
        echo json_encode($data);     
    
        mysql_close($server);
    
    但是,我有一个错误:

    Parse Error: syntax error, unexpected 'return' (T_RETURN), expecting function (T_FUNCTION)
    
    我知道这只是我错误代码中的一个小错误。有人能帮我正确转换这个脚本吗

    p/S:对于我的simple-graph.html.twig,我只使用
    {{source(simple-graph.html)}}
    返回内容而不渲染它

    更新1

    我只是编辑了下面的代码,从数据库中获取数据并将其转换为json

    但是,这次我遇到了这个错误:
    控制器必须返回一个响应(数组(0=>数组(日期=>2012年5月1日,关闭=>58.13),1=>数组(日期=>2012年4月30日,关闭=>53.98),…

    似乎已提取数据,但未能将其转换为json

    更新2

    这是我的新代码,感谢@ADII4的建议。但此代码有错误:试图从命名空间“Dependency\TreeBundle”加载类“TreeBundle”。 您是否忘记了另一个名称空间的“use”语句


    有人知道吗?我非常感谢。

    您会遇到第二个错误,因为您不能在一个函数中调用两个返回语句!而且由于symfony中的控制器函数总是需要一个响应对象,您会遇到此错误,因为第一个返回语句返回的不是响应对象:

    return $stmt->fetchAll();
    
    控制器功能需要如下所示:

    public function queryAction()
    {
        $em = $this->getDoctrine()->getManager();
        $query=$em->createQuery(
            'SELECT date AND close
            FROM data2'
            );
    
        $list = json_encode($query->getResult());
    
        return $this->render('DependencyTreeBundle:query:simple-graph.html.twig', array('data' => $list));
    }
    
        $conn = $this->get('database_connection');
        $list = $conn->fetchAll('SELECT date,close FROM data2');
    
    然后您可以像这样在模板中输出json

    {{ source(data) }}
    
    还为数据库表创建了实体类吗

    更新

    只是稍微增强一下:

    当您使用不带实体的原始sql查询时,按如下方式获取数据:

    public function queryAction()
    {
        $em = $this->getDoctrine()->getManager();
        $query=$em->createQuery(
            'SELECT date AND close
            FROM data2'
            );
    
        $list = json_encode($query->getResult());
    
        return $this->render('DependencyTreeBundle:query:simple-graph.html.twig', array('data' => $list));
    }
    
        $conn = $this->get('database_connection');
        $list = $conn->fetchAll('SELECT date,close FROM data2');
    

    引用:

    由于无法在一个函数中调用两个返回语句,因此出现第二个错误!由于symfony中的控制器函数始终需要响应对象,因此出现此错误,因为第一个返回语句返回的不是响应对象:

    return $stmt->fetchAll();
    
    控制器功能需要如下所示:

    public function queryAction()
    {
        $em = $this->getDoctrine()->getManager();
        $query=$em->createQuery(
            'SELECT date AND close
            FROM data2'
            );
    
        $list = json_encode($query->getResult());
    
        return $this->render('DependencyTreeBundle:query:simple-graph.html.twig', array('data' => $list));
    }
    
        $conn = $this->get('database_connection');
        $list = $conn->fetchAll('SELECT date,close FROM data2');
    
    然后您可以像这样在模板中输出json

    {{ source(data) }}
    
    还为数据库表创建了实体类吗

    更新

    只是稍微增强一下:

    当您使用不带实体的原始sql查询时,按如下方式获取数据:

    public function queryAction()
    {
        $em = $this->getDoctrine()->getManager();
        $query=$em->createQuery(
            'SELECT date AND close
            FROM data2'
            );
    
        $list = json_encode($query->getResult());
    
        return $this->render('DependencyTreeBundle:query:simple-graph.html.twig', array('data' => $list));
    }
    
        $conn = $this->get('database_connection');
        $list = $conn->fetchAll('SELECT date,close FROM data2');
    


    引用:

    return()
    在函数外部存在。是否正确???@NiranjanNRaju:感谢您的快速响应。显然是。很抱歉我犯了愚蠢的错误。我会更正我的脚本。但是,我仍然收到另一个错误。其他错误是什么?自动加载程序预期的类“Dependency\TreeBundle\Controller\DataController”在文件“/home/vagrant/tree_project/src/Dependency/TreeBundle/Controller/DataController.php”中定义。找到了文件,但类不在其中,类名或命名空间可能有输入错误。这是我当前遇到的错误。@NiranjanNRaju:我只需编辑命名空间中的路径就可以绕过该错误。我现在使用的是
    命名空间依赖项\TreeBundle\Controller;
    返回()
    存在于函数外部。是否正确???@NiranjanNRaju:感谢您的快速响应。显然,是的。很抱歉我犯了愚蠢的错误。我将更正我的脚本。但是,我仍然收到另一个错误。其他错误是什么?autoloader希望在文件中定义类“Dependency\TreeBundle\Controller\DataController”“/home/vagrant/tree_project/src/Dependency/TreeBundle/Controller/DataController.php"。找到了文件,但类不在其中,类名或命名空间可能有输入错误。这是我当前遇到的错误。@NiranjanNRaju:我只需在命名空间处编辑路径就可以绕过该错误。我现在使用
    命名空间依赖项\TreeBundle\Controller;
    感谢您的回复。我实现了您的代码,但我使用原始sql查询做了一些修改,因为我没有实体类。但是,我面临另一个错误,即试图从命名空间“Dependency\TreeBundle”加载类“TreeBundle”。您忘记了“use”吗另一个命名空间的语句?这是我的文件夹tree-src-Dependency-TreeBundle-Controller+DataController.phpHow依赖项/TreeBundle的结构是什么样子的?我相信你的命名空间有问题。在TreeBundle中,我有三个文件夹,分别是:1)Controller>包含DataController.php(2)资源,其中还有三个文件夹:config、public和views。3) 依赖性注射。在config文件夹中,我有routing.yml和services.yml。在公用文件夹中,我放置了simple graph、html,并在视图中存储了simple-graph.html.twig,对这些糟糕的句子表示抱歉。我不知道如何使用注释创建树。好的,在哪一行你会得到错误?simple-graph.html.twig是否仅位于views文件夹中,还是位于return语句中定义的子文件夹(数据)中?非常感谢您的帮助。我将更深入地研究这本书;)我会让你知道,并更新代码,一旦我完成了这个项目。再一次,tq!谢谢你的回复。我实现了您的代码,但我使用原始sql查询做了一些修改,因为我没有实体类。但是,我面临另一个错误,即试图从命名空间“Dependency\TreeBundle”加载类“TreeBundle”。您忘记了“use”吗