Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 2:带有CraueFormFlowBundle和FOSUserBundle的多步骤表单_Php_Symfony_Craueformflow - Fatal编程技术网

Php Symfony 2:带有CraueFormFlowBundle和FOSUserBundle的多步骤表单

Php Symfony 2:带有CraueFormFlowBundle和FOSUserBundle的多步骤表单,php,symfony,craueformflow,Php,Symfony,Craueformflow,对于我的应用程序,我必须创建一个多步骤表单来注册新用户,所以我已经安装了,并且我也使用了FOSUserBundle 对于注册表单的第一步,我想用FOSUserBundle注册用户信息(登录名、密码…),然后用户将被重定向到表单的下一步 因此,我将表单类型的集合嵌入到称为“RegistrationTablesElementForm”的单一类型中 但是,当我尝试渲染多步骤窗体的视图时,出现以下错误: 警告:缺少的参数1 FOS\UserBundle\Form\Type\RegistrationFor

对于我的应用程序,我必须创建一个多步骤表单来注册新用户,所以我已经安装了,并且我也使用了FOSUserBundle

对于注册表单的第一步,我想用FOSUserBundle注册用户信息(登录名、密码…),然后用户将被重定向到表单的下一步

因此,我将表单类型的集合嵌入到称为“RegistrationTablesElementForm”的单一类型中

但是,当我尝试渲染多步骤窗体的视图时,出现以下错误:

警告:缺少的参数1 FOS\UserBundle\Form\Type\RegistrationFormType::\uu构造(),调用 在里面 C:\wamp\www\likabee\u 3\src\AppBundle\Form\RegistrationTablesElementForm.php 在第14行,定义了

类型RegistrationTablesElementForm:

namespace AppBundle\Form;


// AppBundle/Form/RegistrationEtablissementForm.php
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class RegistrationEtablissementForm extends AbstractType {

    public function buildForm(FormBuilderInterface $builder, array $options) {
        switch ($options['flow_step']) {
            case 1:
                $builder->add('registration', array('type' => new RegistrationFormType()));
                break;

            case 2:
                $builder->add('etablissement', array('type' => new EtablissementType()));
                break;

            case 3:
                $builder->add('chambres', 'collection', array(
                            'type'         => new ChambreType(),
                            'allow_add'    => true,
                            'allow_delete' => true
                          ));
                break;
        }
    }

    public function getName() {
        return 'registrationEtablissement';
    }

}
第一种形式是:

namespace AppBundle\Form;

use Symfony\Component\Form\FormBuilderInterface;
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;

class RegistrationFormType extends BaseType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);

        // add your custom field
        $builder
            ->add('nom', 'text')
            ->add('prenom', 'text')
            ->add('telephonePortable', 'text')
            ->add('telephoneFixe', 'text', array('required' => false))
            ->add('fax', 'text', array('required' => false))
            ->add('Civilite', 'text')
        ;
    }

    public function getName()
    {
        return 'homes_user_registration';
    }
}
第二点:

class EtablissementType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nombre_place_total','choice', array('choices' => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10', '11' => '11', '12' => '12', '13' => '13', '14' => '14', '15' => '15')))
            ->add('tarif_min', 'text')
            ->add('tarif_max', 'text')
            ->add('description', 'textarea')
            ->add('nom_etablissement', 'text')

        ;
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Etablissement'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'appbundle_etablissement';
    }
}
第三点:

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class ChambreType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom_chambre', 'text')
            ->add('nombre_place','choice', array('choices' => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10')))
            ->add('nombre_lit','choice', array('choices' => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6')))
            ->add('superficie', 'text')
            ->add('tarif_1', 'text')
            ->add('tarif_2', 'text')
            ->add('tarif_3', 'text')
            ->add('tarif_4', 'text')
            ->add('tarif_5', 'text')
            ->add('tarif_6', 'text')
            //->add('etablissement')
        ;
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Chambre'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'appbundle_chambre';
    }
}
在my services.yml文件中,已启用FOSUserBundle注册表单和多步骤表单的服务:

services:
#    service_name:
#        class: AppBundle\Directory\ClassName
#        arguments: ["@another_service_name", "plain_value", "%parameter_name%"]

    homes_user.registration.form.type:
        class: AppBundle\Form\RegistrationFormType
        arguments: [%fos_user.model.user.class%]
        tags:
            - { name: form.type, alias: homes_user_registration }

    likabee.form.registrationEtablissement:
        class: AppBundle\Form\RegistrationEtablissementForm
        tags:
            - { name: form.type, alias: registrationEtablissement }

    likabee.form.flow.registrationEtablissement:
        class: AppBundle\Form\RegistrationEtablissementFlow
        parent: craue.form.flow
        scope: request
        calls:
            - [ setFormType, [ "@likabee.form.registrationEtablissement" ] ]
在我的控制器中,我创建了此函数,用于在视图中呈现窗体:

/**
     * @Route("/registration-etablissement", name="registrationEtablissement")
     */
    public function registrtationEtablissementAction() {
        $formData = new RegistrationEtablissementForm(); // Your form data class. Has to be an object, won't work properly with an array.

        $flow = $this->get('likabee.form.flow.registrationEtablissement'); // must match the flow's service id
        $flow->bind($formData);

        // form of the current step
        $form = $flow->createForm();
        if ($flow->isValid($form))
        {
            $flow->saveCurrentStepData($form);

            if ($flow->nextStep()) {
                // form for the next step
                $form = $flow->createForm();
            } else {
                // flow finished
                $em = $this->getDoctrine()->getManager();
                $em->persist($formData);
                $em->flush();

                $flow->reset(); // remove step data from the session

                return $this->redirect($this->generateUrl('index')); // redirect when done
            }
        }

        return $this->render('registrationEtablissement.html.twig', array(
                'form' => $form->createView(),
                'flow' => $flow,
        ));
    }
我搜索了几天解决方案,但没有找到它


谢谢你的帮助,对不起我的英语;)

在您的类RegistrationTablesElementForm的第14行,您正在调用FOS\UserBundle\Form\Type\RegistrationFormType构造函数。如果在FOSUserBundle中检查类的代码,则可以看到构造函数需要用户类名作为属性:

class RegistrationFormType extends AbstractType
{
    private $class;
    /**
     * @param string $class The User class name
     */
    public function __construct($class)
    {
        $this->class = $class;
    }

    // ...
}

在调用构造函数时添加用户类应该可以解决此问题。

在类的注册表格中,在第14行调用FOS\UserBundle\Form\Type\RegistrationFormType构造函数。如果在FOSUserBundle中检查类的代码,则可以看到构造函数需要用户类名作为属性:

class RegistrationFormType extends AbstractType
{
    private $class;
    /**
     * @param string $class The User class name
     */
    public function __construct($class)
    {
        $this->class = $class;
    }

    // ...
}

在调用构造函数时添加用户类可以解决此问题。

请发布您遇到问题的特定部分,这样就不是调试服务@thomas请发布您遇到问题的特定部分,这样就不是调试服务@ThomasI've add
$builder->add('usilisateur',array('type')=>new RegistrationFormType('homes\u user\u registration'));
在第14行(错误),因为这是在我的services.yml文件中注册表单的别名,但我有一个错误“类型为string或Symfony\Component\form\FormTypeInterface的预期参数”,“数组”给定”。当我用我类型的表单注册的clas名称替换时也是一样。我有什么问题吗?我在第14行添加了
$builder->add('usilisateur',array('type'=>new RegistrationFormType('homes\u user\u registration'));
,因为这是在我的services.yml文件中注册表单的别名,但我有一个错误“预期参数类型为”string或Symfony\Component\Form\FormTypeInterface”,“array”given“。当我替换为我类型的表单注册的clas名称时,情况也是如此。我是否出错了?