Symfony:如何让变量在每个页面上工作?
Symfony: How to make variable work on every page?
我对我的 Symfony 项目有疑问。
我有这段代码显示给定数据库中的行数 table:
// BudgetRepository
public function countBudgets()
{
$qb = $this->createQueryBuilder('budget');
return $qb
->select('count(budget.id)')
->getQuery()
->getSingleScalarResult();
}
// BudgetController
public function all(EntityManagerInterface $entityManager)
{
$repository = $entityManager->getRepository(Budget::class);
$count = $repository->countBudgets();
return $this->render("budget/budget.html.twig", ['numberOfBudgets' => $count]);
}
有效,但仅在 budget/budget.html.twig
内有效 {{ numberOfBudgets }}
。
我怎样才能让它在每个页面上工作(具体来说,我想把它放在我名为 _sidebar.html.twig
的文件中?现在,如果我将 {{ numberOfBudgets }}
放在 _sidebar.html.twig
上,我会得到此错误消息“变量“numberOfBudgets”不存在”。
我该如何重写代码?
我会选择会话变量,查看 Symfony Session 以访问您的计数变量,但如果发生任何更改,请确保在会话中更新此变量。
public function index(EntityManagerInterface $em)
{
$count = $em->getRepository(Budget::class)->countBudgets();
$session = $this->requestStack->getSession();
$session->set('budgetCount', $count);
}
要访问您的 Twig 模板中的会话变量,请查看 App global variable。
<p>Total budgets: {{ app;session.budgetCount }}</p>
您应该使用全局树枝变量。
将您的代码移至服务:
class BudgetService
{
public function all(EntityManagerInterface $entityManager)
{
$repository = $entityManager->getRepository(Budget::class);
return $repository->countBudgets();
}
}
然后在twig配置中注册全局变量(config/packages/twig.yaml):
twig:
globals:
budget: '@App\Services\BudgetService'
然后您可以在任何模板中使用它,例如:
Total: {{ budget.all }}
我对我的 Symfony 项目有疑问。
我有这段代码显示给定数据库中的行数 table:
// BudgetRepository
public function countBudgets()
{
$qb = $this->createQueryBuilder('budget');
return $qb
->select('count(budget.id)')
->getQuery()
->getSingleScalarResult();
}
// BudgetController
public function all(EntityManagerInterface $entityManager)
{
$repository = $entityManager->getRepository(Budget::class);
$count = $repository->countBudgets();
return $this->render("budget/budget.html.twig", ['numberOfBudgets' => $count]);
}
有效,但仅在 budget/budget.html.twig
内有效 {{ numberOfBudgets }}
。
我怎样才能让它在每个页面上工作(具体来说,我想把它放在我名为 _sidebar.html.twig
的文件中?现在,如果我将 {{ numberOfBudgets }}
放在 _sidebar.html.twig
上,我会得到此错误消息“变量“numberOfBudgets”不存在”。
我该如何重写代码?
我会选择会话变量,查看 Symfony Session 以访问您的计数变量,但如果发生任何更改,请确保在会话中更新此变量。
public function index(EntityManagerInterface $em)
{
$count = $em->getRepository(Budget::class)->countBudgets();
$session = $this->requestStack->getSession();
$session->set('budgetCount', $count);
}
要访问您的 Twig 模板中的会话变量,请查看 App global variable。
<p>Total budgets: {{ app;session.budgetCount }}</p>
您应该使用全局树枝变量。 将您的代码移至服务:
class BudgetService
{
public function all(EntityManagerInterface $entityManager)
{
$repository = $entityManager->getRepository(Budget::class);
return $repository->countBudgets();
}
}
然后在twig配置中注册全局变量(config/packages/twig.yaml):
twig:
globals:
budget: '@App\Services\BudgetService'
然后您可以在任何模板中使用它,例如:
Total: {{ budget.all }}