Php Hello应为类型为“的参数”;字符串“&引用;bundle\FrontBundle\Form\Type\PrestationType“;鉴于

Php Hello应为类型为“的参数”;字符串“&引用;bundle\FrontBundle\Form\Type\PrestationType“;鉴于,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我测试了我的应用程序,发现了这个错误 请帮忙 我的模板 namespace bundle\FrontBundle\Form\Type; use Doctrine\ORM\EntityRepository; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver;

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

我的模板

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


}
null,数组()) 在/Users/sylva/garage/vendor/symfony/symfony/src/symfony/Component/Form/FormFactory.php中 第39行

at Symfony\Component\Form\FormFactory->create(object(PrestationType),
null,数组()) 在/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") 在/Users/sylva/garage/vendor/symfony/symfony/src/symfony/Component/HttpKernel/HttpKernel.php中 第62行

at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), '1',
(对) 在/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
thanx guy

$this->createForm()希望第一个参数是要实例化的表单的类名

替换:

$form = $this->createForm(new PrestationType());


考虑到在处理Symfony表单时您需要图像表单并使用Symfony版本,并且由于我使用的是HttpFoundationExtension,所以我不得不向它添加相关的工厂,因此从

$formFactory = Forms::createFormFactory();

如这里所写

与HttpFoundation组件的集成

如果使用HttpFoundation组件,则应将HttpFoundation扩展添加到表单工厂:

use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension;
use Symfony\Component\Form\Forms;

$formFactory = Forms::createFormFactoryBuilder()
    ->addExtension(new HttpFoundationExtension())
    ->getFormFactory();
现在,在处理表单时,可以将请求对象传递给handleRequest():


它是一种表达形式还是一种形象?
// for PHP 5.5+
$form = $this->createForm(PrestationType::class);
// for older versions
$form = $this->createForm('bundle\FrontBundle\Form\Type\PrestationType');
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()));
    }

    /.../
}
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';
    }
}
$formFactory = Forms::createFormFactory();
$formFactory = Forms::createFormFactoryBuilder()
    ->addExtension(new HttpFoundationExtension())
    ->getFormFactory();
use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension;
use Symfony\Component\Form\Forms;

$formFactory = Forms::createFormFactoryBuilder()
    ->addExtension(new HttpFoundationExtension())
    ->getFormFactory();
$form->handleRequest($request);