我接手了一个基于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连接,并且希望避免这种情况。
1条答案
按热度按时间avwztpqn1#
弗朗西斯科给我指出了正确的方向不知怎么的我当时只在想特定的php文件。
在AppKernel.php中我添加了:
然后在观察器控制器中
它从
SightingRepository
获取数据。现在我有另一个问题,它需要18秒来获取数据。同样的查询需要6秒使用
HeidiSQL
。但我想我将不得不张贴单独的问题来解决这个问题。