如何使用 AJAX 从Twig模板调用php函数

kfgdxczn  于 2022-12-28  发布在  PHP
关注(0)|答案(1)|浏览(245)

我接手了一个基于Twig 3模板Bootstrap 3框架的应用程序。我的知识是最少的。我必须扩展它的功能:使用 AJAX 从PHP中的控制器加载数据,当用户改变标签窗格。没有Symfony,所以我理解没有路由,没有'路径'。我读了这么多的主题,但没有找到答案。
我的控制器,它呈现树枝页面:

<?php

namespace Controller;

use Entity\App\Message;
use Entity\User\Observer;
use Entity\User\Team;

class ObserverController extends Controller
{
//some other functions

//render 'druzyna.htm.twig'
public function druzynaAction()
    {
        if(!isset($_GET['team']))
        {
            header("Location:app.php");
            die();
        }
        if (isset($_GET['year'])) {
            $year=$_GET['year'];
          }
        else {
            $year=2022;
        }

        $repo = $this->getRepository('User\Team');
        $t = $repo->byId(intval($_GET['team']));
        if(!$t)
        {
            header("Location:app.php");
            die();
        }

        $repo = $this->getRepository('Sighting');
        $teamsightings = $repo->TeamSightings($year, $t->getId());
        $TeamObservationsStats = $repo->TeamObservationsStats($year, $t->getId());
        $secretary = $t->getSecretary();
        $secretary_id = $secretary->getID();

        return $this->render('druzyna.htm.twig', array('team' => $t, 'secretary_id' =>   $secretary_id, 'teamsightings' => $teamsightings, 'year' => $year, 'TeamObservationsStats' => $TeamObservationsStats));
    }

       //load data via Ajax
       public function druzyna_gatunki() {
            //parameters
            $year = $_POST['year']; 
            $secretary = $_POST['secretary'];

            //all the sql and PDO code, which is correct
            echo json_encode($gatunki);
       }

在我的druzyna.htm.twig文件中:

<script type="text/javascript">
     $(document).ready(function() {
          $("a[href='#tab2']").one('shown.bs.tab', function(e){
              $.ajax({
                type: 'POST',
                url: '???',
                data: ({year: {{ year }}, secretary: {{ secretary_id }}}),
                dataType: 'json',
                success: function (gatunki) {
                      //sth
                   }
          });
     });
</script>

我如何调用呈现这个小枝页面的控制器PHP文件?另一个问题是这个PHP文件中特定于t点的函数,这应该是不可能的...(?).我是否应该创建一个新的PHP文件,仅仅是为了这个目的,来加载要通过 AJAX 发送的数据?我试过了,能够创建一个独特的,独立的PHP文件,在twig结构之外。并且从jquery调用它,使用相对路径。2这个解决方案是可行的,但是我必须在PHP中创建单独的DB连接,并且希望避免这种情况。

avwztpqn

avwztpqn1#

弗朗西斯科给我指出了正确的方向不知怎么的我当时只在想特定的php文件。

$.ajax({
  type: 'POST',
  url: 'app.php?m_id=16',
  data: ({
    year: {{ year }},
    secretary: {{ secretary_id }}
  }),
  dataType: 'json',
})

在AppKernel.php中我添加了:

case 16:
  $c = new Controller\ObserverController($this, DB_PREFIX);
  $m = "druzyna_gatunki";
  break;

然后在观察器控制器中

public function druzyna_gatunkiAction() {
  //przekazywany parametr 'rok' i 'secretary'
  $year = $_POST['year'];
  $secretary = $_POST['secretary'];

  $repo = $this->getRepository('Sighting');
  $druzynagatunki = $repo->druzyna_gatunki($year, $secretary);
  echo json_encode($druzynagatunki);
}

它从SightingRepository获取数据。
现在我有另一个问题,它需要18秒来获取数据。同样的查询需要6秒使用HeidiSQL。但我想我将不得不张贴单独的问题来解决这个问题。

相关问题