簡體   English   中英

從Symfony2中的實體填充表單數據

[英]Populating form data from entity in Symfony2

我有一個基本上可以呈現表單的動作,如果ID為空,我希望它是一個新表單,如果ID與數據庫中的PK匹配,我希望它是一個編輯表單。 顯然我的邏輯是錯誤的,因為每次都會渲染一個新表單。

public function editGlobalFirewallFilter(Request $request, Entities\GlobalFirewallFilter $firewall_rule = null) {
n
    // Check if we have a valid rule. If not create a new blank one and associate our account id
    // if( ! $firewall_rule ) {
    //     $results = $this->getDoctrine()->getRepository('bundle:GlobalFirewallFilter');
    //     $rules = $results->findAll();
    //     $firewall_rule = new Entities\GlobalFirewallFilter();
    // }
    $firewall_rule = new Entities\GlobalFirewallFilter();

    // Generate our form
    $form = $this->createForm(new SAForms\GlobalFirewallRuleType(), $firewall_rule);

    $form->handleRequest($request);

    if($form->isValid()) {

        // Save our firewall rule
        $em = $this->getDoctrine()->getManager();
        $em->persist($firewall_rule);
        $em->flush();

        return $this->redirect($this->generateUrl('_dashboard__global_firewall'));
    }


        return array(
        'title'         => $firewall_rule->getFirewallFilterId() ? 'Edit Rule' : 'New Rule',
        'form'          => $form->createView(),
    );
}

您應該使用form generator command以正確的方式定向:

基於原則實體生成CRUD控制器

http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_doctrine_crud.html使用以下命令:

php app/console generate:doctrine:crud

我將根據需要使用所有標准動作(在您的情況下) updateActionnewActioneditAction生成控制器的骨架。

我不太確定為什么會有resultsrules -您不使用它們。 我認為這段代碼應該可以解決問題。

public function editGlobalFirewallFilter(Request $request, Entities\GlobalFirewallFilter $firewall_rule = null) {

    // Check if we have a valid rule. If not create a new blank one and associate our account id
    $firewall_rule = $firewall_rule ?: new Entities\GlobalFirewallFilter();

    // Generate our form
    $form = $this->createForm(new SAForms\GlobalFirewallRuleType(), $firewall_rule);

    $form->handleRequest($request);

    if($form->isValid()) {

        // Save our firewall rule
        $em = $this->getDoctrine()->getManager();
        $em->persist($firewall_rule);
        $em->flush();

        return $this->redirect($this->generateUrl('_dashboard__global_firewall'));
    }


    return array(
        'title'         => $firewall_rule->getFirewallFilterId() ? 'Edit Rule' : 'New Rule',
        'form'          => $form->createView(),
    );
}

PS遺憾的是,我無法發表評論。.您可以在使用此功能的地方提供控制器操作嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM