我测试我的应用程序,我有这个错误请帮忙
我的表单类型
namespace bundle'FrontBundle'Form'Type;
use Doctrine'ORM'EntityRepository;
use Symfony'Component'Form'AbstractType;
use Symfony'Component'Form'FormBuilderInterface;
use Symfony'Component'OptionsResolver'OptionsResolver;
class PrestationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('path')
->add('alt')
->add('save', 'submit');
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'bundle'FrontBundle'Entity'Image',
));
}
public function getName()
{
return 'prestation';
}
}
我的实体
<?php
namespace bundle'FrontBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
/**
* Image
*
* @ORM'Table(name="image")
* @ORM'Entity(repositoryClass="bundle'FrontBundle'Repository'ImageRepository")
*/
class Image
{
/**
* @var int
*
* @ORM'Column(name="id", type="integer")
* @ORM'Id
* @ORM'GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM'Column(name="path", type="string", length=255)
*/
protected $path;
/**
* @var string
*
* @ORM'Column(name="alt", type="string", length=255)
*/
protected $alt;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
}
我的控制器
<?php
namespace bundle'FrontBundle'Controller;
use bundle'FrontBundle'Entity'Image;
use bundle'FrontBundle'Entity'Prestation;
use bundle'FrontBundle'Form'Type'PrestationType;
use Symfony'Bundle'FrameworkBundle'Controller'Controller;
use Symfony'Component'HttpFoundation'Request;
class FrontController extends Controller
{
public function indexAction(Request $request)
{
$form = $this->createForm(new PrestationType());
$form->handleRequest($request);
return $this->render('FrontBundle::index.html.twig', array('form' => $form->createView()));
}
public function listAction()
{
return $this->render('FrontBundle:Pages:list.html.twig');
}
}
这是我的输出错误
"字符串"类型的预期参数, 给出"bundle''FrontBundle''Form''Type''PrestationType">
和堆栈跟踪
[1] Symfony''Component''Form''Exception''UnexpectedTypeException: Expected "字符串"类型的参数, 给出"bundle''FrontBundle''Form''Type''PrestationType" 不适用 in/Users/sylva/garage/vendor/symfony/symfony/src/Symfony/Component/Form/FormFactory.php 64号线
at Symfony'Component'Form'FormFactory->createBuilder(object(PrestationType),
空, 数组((( in/Users/sylva/garage/vendor/symfony/symfony/src/Symfony/Component/Form/FormFactory.php 39号线
at Symfony'Component'Form'FormFactory->create(object(PrestationType),
空, 数组((( in/Users/sylva/garage/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php 285路
at Symfony'Bundle'FrameworkBundle'Controller'Controller->createForm(object(PrestationType)) in /Users/sylva/garage/src/bundle/FrontBundle/Controller/FrontController.php
19号线
at bundle'FrontBundle'Controller'FrontController->indexAction(object(Request)) in line at call_user_func_array(array(object(FrontController), 'indexAction'), array(object(Request))) in /Users/sylva/garage/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php
139路
at Symfony'Component'HttpKernel'HttpKernel->handleRaw(object(Request),
"1"( in/Users/sylva/garage/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php 62号线
at Symfony'Component'HttpKernel'HttpKernel->handle(object(Request), '1',
真( in/Users/sylva/garage/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php 169路
at Symfony'Component'HttpKernel'Kernel->handle(object(Request)) in /Users/sylva/garage/web/app_dev.php line 30
感谢盖伊
$this->createForm(( 期望第一个参数是要实例化的表单的类名。
取代:
$form = $this->createForm(new PrestationType());
跟
// for PHP 5.5+
$form = $this->createForm(PrestationType::class);
// for older versions
$form = $this->createForm('bundle'FrontBundle'Form'Type'PrestationType');
考虑到你想要图像形式并使用Symfony版本<= 2.7.* :
在控制器中,传递一个新的 Image
对象作为 createForm
方法的第二个参数:
namespace bundle'FrontBundle'Controller;
use Symfony'Bundle'FrameworkBundle'Controller'Controller;
use Symfony'Component'HttpFoundation'Request;
use bundle'FrontBundle'Form'Type'ImageType;
use bundle'FrontBundle'Entity'Image;
class FrontController extends Controller
{
public function indexAction(Request $request)
{
$image = new Image();
$form = $this->createForm(new ImageType(), $image);
$form->handleRequest($request);
if ($form->isValid()) {
// Your code... e.g persist & flush Entity...
return $this->redirectToRoute('task_success');
}
return $this->render('FrontBundle::index.html.twig', array('form' => $form->createView()));
}
/.../
}
在我们的ImageType
:
namespace bundle'FrontBundle'Form'Type;
use Symfony'Component'Form'AbstractType;
use Symfony'Component'Form'FormBuilderInterface;
use Symfony'Component'OptionsResolver'OptionsResolver;
class ImageType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('path')
->add('alt')
->add('save', 'submit');
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'bundle'FrontBundle'Entity'Image'
]);
}
public function getName()
{
return 'image';
}
}
在处理symfony表单时,由于我使用的是HttpFoundationExtension,我还必须向其添加相关的工厂,因此从
$formFactory = Forms::createFormFactory();
自
$formFactory = Forms::createFormFactoryBuilder()
->addExtension(new HttpFoundationExtension())
->getFormFactory();
如这里所写https://symfony.com/doc/current/components/form.html
与 HttpFoundation 组件集成
如果使用 HttpFoundation组件,则应将 HttpFoundationExtension 添加到表单工厂:
use Symfony'Component'Form'Extension'HttpFoundation'HttpFoundationExtension;
use Symfony'Component'Form'Forms;
$formFactory = Forms::createFormFactoryBuilder()
->addExtension(new HttpFoundationExtension())
->getFormFactory();
现在,当你处理一个表单时,你可以将 Request 对象传递给 handleRequest((:
$form->handleRequest($request);