你好 给定类型为“字符串”、“捆绑前捆绑形式类型预站类型”的预期参数


Hello Expected argument of type "string", "bundleFrontBundleFormTypePrestationType" given

我测试我的应用程序,我有这个错误请帮忙

我的表单类型

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);