首页 > 解决方案 > 在树枝中调用实体的函数

问题描述

我希望通过将 id 作为参数传递来通过树枝从实体中检索信息。但是我阻止了我实体中的功能:

我的实体(函数需要调用):

public function getNameFournisseur($id)
{
    ???
}

我的树枝:

{{ staticFournisseur.getNameFournisseur(idFournisseur) }} 

我的控制器:

/**
 * @Route("/new", name="new_invoice", methods={"GET","POST"})
 */
public function new(Request $request, SessionInterface $session, ArticlesRepository $articlesRepository, FournisseursRepository $fournisseursRepository): Response
{
    $invoice = new Invoice();
    $form = $this->createForm(InvoiceType::class, $invoice);
    $form->handleRequest($request);

    $articles = $session->get('articleInvoice', []);

    $articleData = [];

    foreach ($articles as $k => $article) {
        $articleData [] = [
            'articleInvoice' => $articlesRepository->find($k),
            'quantityInvoice' => $article
        ];
    }

    $total = 0;

    foreach ($articleData as $totalArticle) {
        $totalArticles = $totalArticle['articleInvoice']->getPrice() * $totalArticle['quantityInvoice'];
        $total += $totalArticles;
    }

    $session->set('totalHt', $total);

    $totalAllArticles = $session->get('totalHt');
    $tauxDiscount = $session->get('discountTaux');

    if (!$tauxDiscount) {
        $totalWithDiscount = $total;
    } else {
        $totalWithDiscount = $totalAllArticles - ($totalAllArticles * $tauxDiscount) / 100;
    }

    if ($form->isSubmitted()) {
        //$session->remove('idFournisseur');

        $id_fournisseur = (int)$request->request->get('order')['fournisseur_id'];
        $fournisseur = $fournisseursRepository->findOneBy(['id' => $id_fournisseur]);

        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($invoice);
        $entityManager->flush();

        return $this->redirectToRoute('invoices');
    }

    return $this->render('admin/invoices/new.html.twig', [
        'staticFournisseur' => new Fournisseur(),
        'idFournisseur' => $session->get('idFournisseur'),
        'discountTaux' => $tauxDiscount,
        'totalHt' => $totalWithDiscount,
        'art' => $articleData,
        'form' => $form->createView()
    ]);
}

因此,由于我在树枝中作为参数传递的 id,我寻求恢复供应商的名称。

标签: symfonytwig

解决方案


getNameFournisseur($id)是从数据库中检索数据的函数,而不是从单个(已加载的)实体中检索数据;换句话说,它应该在 FournisseursRepository 中

此外,如果您使用 Doctrine,您通常希望加载完整的实体,而不仅仅是一个字段

'staticFournisseur' => $fournisseursRepository->findOneById($session->get('idFournisseur'));

在树枝上:

{{ staticFournisseur.getName() }}

甚至

{{ staticFournisseur.name }}

推荐阅读