如何在函数 symfony 5 中定义实体

Posted

技术标签:

【中文标题】如何在函数 symfony 5 中定义实体【英文标题】:how to define an entity inside the function symfony 5 【发布时间】:2021-08-15 13:37:33 【问题描述】:

例如,这是我的功能:

   /**
 *   @Route("/companyProfile/id_Adresse/id_Employes/id_Contact", name="company_profile")
 * @ParamConverter("Adresse", options="mapping": "id_Adresse" : "id")
 * @ParamConverter("Employes", options="mapping": "id_Employes"   : "id")
 * @ParamConverter("Contact", options="mapping": "id_Contact"   : "id")
 */
public function index(Adresse $adresse , Employes $employes , Contact $contact,ContactRepository $contactrepository, EmployesRepository $employesrepository , AdresseRepository $adresserepository ): Response
   
    $contactform=$this->createForm(ContactType::class, $Contact);
    $employesform=$this->createForm(EmployesType::class, $Employes);
    $adresseform=$this->createForm(AdresseType::class, $Adresse);
    return $this->render('companyProfile.html.twig', [
        'Contact' => $contactrepository->findAll(),
        'Employes' => $employesrepository->findAll(),
        'Adresse' => $adresserepository->findAll(),
        'contactform'=>$contactform->createView(),
        'employesform'=>$employesform->createView(),
        'adresseform'=>$adresseform->createView()
    ]);

如您所见,我在参数中声明了所有实体,但我需要在路由中添加所有 id,这不是我需要的,我只是希望我的路由是这样的:

   /*
   *@Route ("/companyProfile", name="company_profile")
   */

提前感谢您的所有回答

【问题讨论】:

如果不是路由,id_Contact 值究竟来自哪里? 【参考方案1】:

参数转换器的目标是从路由参数中检索实体。我的猜测是您想获取所有这些实体,但不想在路由中使用它们的 id。

为此,您需要获取每个实体的存储库,然后在此处获取它们。还有一个问题:你怎么知道你想要哪个实体?

这是您的操作的示例

/**
 * @Route("/companyProfile", name="company_profile")
 */
public function index(ContactRepository $contactRepository, EmployesRepository $employesRepository , AdresseRepository $adresseRepository): Response
   
    $contactform = $this->createForm(ContactType::class, $contactRepository->find($contactId);
    $employesform = $this->createForm(EmployesType::class, $employesRepository->find($employesId);
    $adresseform = $this->createForm(AdresseType::class, $adresseRepository->find($adresseId);

    return $this->render('companyProfile.html.twig', [
        'Contact' => $contactrepository->findAll(),
        'Employes' => $employesrepository->findAll(),
        'Adresse' => $adresserepository->findAll(),
        'contactform'=>$contactform->createView(),
        'employesform'=>$employesform->createView(),
        'adresseform'=>$adresseform->createView()
    ]);

您仍然需要一种方法来获取所有这些新的 ids 变量,但对于给定的信息,我无法为您提供更多帮助。

【讨论】:

我不太明白你的问题 在我的例子中,我搜索了一个联系人、雇员和地址实体,每个实体都有一个 id,但我不知道你想如何从数据库中检索它们。这是带有修复 ID,还是您有不同的方法来获取此 ID? 是的,我只想显示所有这些我不需要 id 来指定我需要哪一个【参考方案2】:

我尝试了一种不同的方式来显示它们,但是当我想编辑例如联系人时,它不起作用并且他们向我显示了这个错误: 在呈现模板期间引发了异常(“注意:未定义的索引:联系人”)。 这是一个屏幕截图: enter image description here

这是我的代码:

    /**
 * @Route("/companyProfile/", name="company_profile")
 */
public function index(): Response
   
    $Contact = $this->getDoctrine()
            ->getRepository(Contact::class)
            ->findAll();
    $Employes = $this->getDoctrine()
            ->getRepository(Employes::class)
            ->findAll();
    $Adresse = $this->getDoctrine()
            ->getRepository(Adresse::class)
            ->findAll();


    return $this->render('companyProfile.html.twig', [
        'Contact' => $Contact,
        'Employes' => $Employes,
        'Adresse' => $Adresse,

    ]);

这是编辑功能:

    /** 
 * @Route("/UpdateContact/id",name="editcontact")
 */
public function EditContact(Contact $contact , Request $request ,ManagerRegistry $manager)

     $contactform=$this->createForm(ContactType::class, $contact);
                
     $contactform->handleRequest($request);
     if($contactform->isSubmitted() && $contactform->isValid())
     
         
        $manager = $this->getDoctrine()->getManager();
        $manager->persist($contact);
        $manager->flush();
        return $this->redirectToRoute('company_profile');    
         

    return $this->render('companyProfile.html.twig', [
        'contactform'=>$contactform->createView()
     ]);

最后我的树枝:

  <div class="boxed-list margin-bottom-60">
            <div class="boxed-list-headline">
                <h3><i class="icon-material-outline-business-center"></i> les contactes d'entreprise</h3>
            </div>
            </br>
            % for Contact in Contact %
            <div class="listings-container compact-list-layout">
                  <ul class="list-group">
                    <li class="list-group-item">
                    <h3>Contact</h3>
                    </br></br>
                <div class="container pt-3">
                    <h5>Responsable:</h5>
                    <p>Contact.responsable</p>
                    <h5>N° de tele:</h5>
                    <p>Contact.telephone</p>
                    <h5>Addresse email:</h5>
                    <p>Contact.email</p>
                    <h5>Note:</h5>
                    <p>Contact.note</p>
                    <div class="centered-button margin-top-35">
                    <!-- Button trigger modal -->
                    <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
                    Modifier
                    </button>

                    <!-- Modal -->
                    <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
                    <div class="modal-dialog">
                        <div class="modal-content">
                        <div class="modal-header">
                            <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
                            <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                        </div>
                        <div class="modal-body">
                                        
                            <!-- Form -->
                        <form method="post" id="add-note">
                        <div class="form-group">
                            <label for="nom">Responsable:</label>
                            <input type="text" class="form-control" placeholder="Contact.responsable" id="nom">
                        </div>
                        <div class="form-group">
                            <label for="tele">N° de tele:</label>
                            <input type="text" class="form-control" placeholder="Contact.telephone" id="telephone">
                        </div>
                        <div class="form-group">
                            <label for="email">Email address:</label>
                            <input type="email" class="form-control" placeholder="Contact.email" id="email">
                        </div>
                            <label for="note">Note:</label>
                            <textarea name="textarea" cols="10" placeholder="Contact.note" class="with-border"></textarea>
                        </form>
                                    </div>
                                    <div class="modal-footer">
                                        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
                                        <a href=" path ('editcontact',"id":Contact.id)" class="popup-with-zoom-anim button button-sliding-icon"><button type="button" class="btn btn-primary">Save changes</button><i class="icon-material-outline-arrow-right-alt"></i></a>
                                    </div>
                                    </div>
                                </div>
                                </div>
                

【讨论】:

请不要发布附加信息作为答案,但 edit 将包含它的原始问题,尽管这种情况可能需要一个新问题,因为它已经足够不同了。也就是说,您的树枝似乎不完整,您在不同的函数中使用相同的模板,但没有传递相同的变量,这就是“未定义”的原因。 对不起,我不知道,这是我第一次使用这个网站,谢谢你的回答 % for Contact in Contact %

以上是关于如何在函数 symfony 5 中定义实体的主要内容,如果未能解决你的问题,请参考以下文章

如何在 symfony 5 中加入两个表?

如何在 Symfony 中动态创建实体类

Symfony 5:如何在登录前检查用户是不是被禁止

在选择类型 Symfony 5 中显示相关实体中的特定字段

我如何在没有 symfony 的项目中重用我的 symfony 实体

symfony 5 表单实体类型过滤器选择基于选择的其他实体类型选择