首页 > 解决方案 > 未知的“表单”函数 php symfony/form twig

问题描述

在我的项目中,我安装了 symfony / form、symfony / twig-bridge,但是每当我运行模板时,我都无法识别我的标签来呈现我可能错过的表单?两者都在版本 5 中,一直显示这个,未知的“form”函数,未知的“form_start”函数

require 'vendor/autoload.php'; 
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 
use Symfony\Component\Form\Extension\Core\Type\TextType;  
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Forms; 
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Validator\Validation;
use Symfony\Bridge\Twig\Form\TwigRendererEngine;     
use Symfony\Component\Form\Extension\Validator\ValidatorExtension;
use Symfony\Component\Form\Extension\Csrf\CsrfExtension;
use Symfony\Component\Security\Csrf\CsrfTokenManager;
use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\Loader\XliffFileLoader;
use Symfony\Bridge\Twig\Extension\TranslationExtension;
use Symfony\Bridge\Twig\Extension\FormExtension;
use Symfony\Component\Form\FormView;

class TaskController extends AbstractType
{
public function new()
{
    // creates a task object and initializes some data for this example       
    $formFactory = Forms::createFormFactory();
    $form = $formFactory->createBuilder()
        ->add('task', TextType::class)
        ->add('dueDate', DateType::class)
        ->add('save', SubmitType::class, ['label' => 'Create Task'])
        ->getForm();

    $loader = new \Twig\Loader\FilesystemLoader('vista/parte');
    $twig = new \Twig\Environment($loader, ['debug' => true]);                
    return $twig->render('foms.html.twig', ['form' => $form->createView()]);       
}
}

(new TaskController())->new();

标签: phptwigsymfony-formssymfony5

解决方案


你在这里遗漏了一些东西。

控制器和表单类型是两个不同的东西。您可以在控制器中创建表单,然后将其传递给视图。

但是,如果您想将表单与控制器分开,您可以创建一个将扩展的表单类型AbstractType

这应该是这样的:

class TaskController extends AbstractController // add the use for that one
{
    public function new()
    {
        $form = $this->createFormBuilder()
            ->add('task', TextType::class)
            ->add('dueDate', DateType::class)
            ->add('save', SubmitType::class, ['label' => 'Create Task'])
            ->getForm();

        return $twig->render('foms.html.twig', ['form' => $form->createView()]);       
    }
}

推荐阅读