這個問題在這里已經有了答案: 如何將全域變數注入所有模板? (2 個回答) 如何使用來自資料庫的值為 Twig 模板定義全域變數? (2 個回答) 7 天前關閉。
我對我的 Symfony 專案有疑問。
我有這段代碼顯示給定資料庫表中的行數:
// 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.twigusung內部作業{{ numberOfBudgets }}。
我怎樣才能讓它在每個頁面上作業(特別是我希望它被放置在我的名為 的檔案中_sidebar.html.twig?現在如果我放置{{ numberOfBudgets }}在_sidebar.html.twig我收到此錯誤訊息“變數“numberOfBudgets”不存在”。
我應該如何重寫代碼?
uj5u.com熱心網友回復:
您應該使用全域 twig 變數。將您的代碼移至服務:
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 }}
uj5u.com熱心網友回復:
我會去找一個會話變數,看看Symfony Session來訪問你的 count 變數,但如果發生任何變化,請確保在會話中更新這個 var。
public function index(EntityManagerInterface $em)
{
$count = $em->getRepository(Budget::class)->countBudgets();
$session = $this->requestStack->getSession();
$session->set('budgetCount', $count);
}
要訪問 twig 模板中的會話變數,請查看App 全域變數。
<p>Total budgets: {{ app;session.budgetCount }}</p>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/448595.html
