簡體   English   中英

根據用戶交互自定義Symfony表單

[英]Customize Symfony Form based on user interaction

我有AdsList實體

我想將其添加到作為MainCategory的子類別的CategoryAd Entity中(我希望這很有意義)

我希望這是基於“ 提交表單的動態生成”的,因此當用戶選擇“ MainCategories”之一時,下一個字段應填充為其子類別

但我仍然不知道如何針對我的情況調整該示例

如果代碼太多,我會提出要點

AdsList

class AdsList
{
/**
 * @ORM\Column(type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\Column(type="string")
 */
protected $title;

/**
 * @ORM\Column(type="text")
 */
protected $content;

/**
 * @ORM\ManyToOne(targetEntity="CategoryAd", inversedBy="ad")
 */
protected $category;

/**
 * @ORM\column(type="date", name="posted_at")
 */
protected $postedAt;

/**
 * @ORM\ManyToOne(targetEntity="Agency", inversedBy="ads")
 * @ORM\JoinColumn(name="agency_id", referencedColumnName="id")
 */
protected $postedBy;
}

CategoryAd

class CategoryAd
{
/**
 * @var int
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 * @Assert\NotBlank()
 * @ORM\Column(name="name", type="string", length=255, unique=true)
 */
private $name;

/**
 * @ORM\OneToMany(targetEntity="AdsList", mappedBy="category")
 */
private $ad;

/**
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\MainCategory", inversedBy="subCat")
 */
private $parentCat;

/**
 * CategoryAd constructor.
 */

public function __construct()
{
    $this->ad = new ArrayCollection();
}

主要類別

class MainCategory
{
/**
 * @var int
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;
/**
 * @var string
 * @Assert\NotBlank()
 * @ORM\Column(name="name", type="string", length=255, unique=true)
 */
protected $name;

/**
 * @var
 * @ORM\OneToMany(targetEntity="AppBundle\Entity\CategoryAd", mappedBy="parentCat")
 * @ORM\JoinColumn(name="cat_id", referencedColumnName="id")
 */
protected $subCat;

/**
 * MainCategory constructor.
 * @param string $name
 */
public function __construct($name)
{
    $this->name = $name;
}

這是表格

目前,我想做父類別,因為我目前有90個類別,而且只會得到更多

我不知道ajax,但symfony確實在文檔中顯示了一個示例

你能幫我嗎 ?

    /**
    * @Route("/post", name="post")
    */
    public function newAction(Request $request)
    {
    // create a Post and give it some dummy data for this example
    $task = new AdsList();
    $task->setpostedAt(new \DateTime('now'));

    $form = $this->createFormBuilder($task)
        ->add('title', TextType::class)
        ->add('content',TextareaType::class)
        ->add('category', EntityType::class, array(
        // query choices from Category.Name
            'class' => 'AppBundle:CategoryAd',
            'choice_label' => 'name',
        ))
        ->add('postedAt', DateType::class, array(
            'widget' => 'single_text',
            // this is actually the default format for single_text
            'format' => 'yyyy-MM-dd',
        ))
        ->add('save', SubmitType::class, array('label' => 'Create Post'))
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        // $form->getData() holds the submitted values iN MeM
        $task = $form->getData();

        // save the task to the database
        $em = $this->getDoctrine()->getManager();
        $em->persist($task);
        $em->flush();
        return $this->redirectToRoute('list');
    }

    return $this->render('postlist/post.html.twig', array(
        'adForm' => $form->createView(),
    ));
}

您不能在用例中使用鏈接“ 動態生成提交的表單 ”。 symfony的文檔只講動態生成FormType而不是值。

您應該使用javascript填充數據。 我不知道您的FormType和下一個字段如何,但是您可以創建一個ajax調用,該調用在每次選擇主類別並正確填充字段時都檢索子類別。 如果使用CollectionType,則只需使用原型。

暫無
暫無

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

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