我是Symfony 4的新手,我正在按照这个教程来做"https:/symfony.comdoc4.4forms.html。",但它不能识别我的变量 "form",我不知道为什么(所有东西都是最新的)。
我的控制器 :
<?php
namespace App\Controller;
use App\Entity\Task;
use App\Form\Type\TaskType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
class TaskController extends AbstractController
{
public function new(Request $request)
{
// creates a task object and initializes some data for this example
$task = new Task();
$task->setTask('Write a blog post');
$task->setDueDate(new \DateTime('tomorrow'));
/*$form = $this->createFormBuilder($task)
->add('task', TextType::class)
->add('dueDate', DateType::class)
->add('save', SubmitType::class, ['label' => 'Create Task'])
->setMethod('GET')
->getForm();*/
$form = $this->createForm(TaskType::class, $task);
return $this->render('search/search.html.twig', [
'form' => $form->createView(),
]);
}
}
我的任务类型.php :
<?php
namespace App\Form\Type;
use App\Entity\Task;
use Symfony\Component\OptionsResolver\OptionsResolver;
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;
class TaskType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('task', TextType::class)
->add('dueDate', DateType::class)
->add('save', SubmitType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Task::class,
]);
}
}
和我的任务.php。
<?php
namespace App\Entity;
class Task
{
protected $task;
protected $dueDate;
public function getTask()
{
return $this->task;
}
public function setTask($task)
{
$this->task = $task;
}
public function getDueDate()
{
return $this->dueDate;
}
public function setDueDate(\DateTime $dueDate = null)
{
$this->dueDate = $dueDate;
}
}
如果你看到我的部分有任何错误,我是开放的。
我在这里调用我的表单。
{{ form_start(form) }}
{{ form(form) }}
{{ form_end(form) }}
在我的 "search.html.twig "中。
我做了一些新的事情(对我来说很简单),但我有一个错误 "试图调用一个名为 "createFormBuilder "的未定义方法"。
这是我的控制器。
public function searchBar(){
$form = $this-> createFormBuilder(null)
->add('query', TextType::class)
->add('search', SubmitType::class, [
'attr' => [
'class' => 'btn btn-primary'
]
])
->getForm();
return $this->render('search/search.html.twig', [
'form' => $form->createView()
]);
}
我在我的'search.html.twig'中这样调用它。
{{form_start(form)}}
{{form(form)}}
{{form_end(form)}}
这里是我的 "base.html.twig"。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>{% block title %}{% endblock %}</title>
{% block stylesheets %}{% endblock %}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
</head>
<body>
{{ render(controller(
'App\\Controller\\TaskController::searchBar'
)) }}
{% block body %}{% endblock %}
{% block javascripts %}{% endblock %}
</body>
</html>