警告:缺少FOS \ UserBundle \ Form的参数1

时间:2014-10-19 01:04:54

标签: php forms symfony fosuserbundle

我得到这个警告,似乎无法找到解决方案,我已经尝试了各种答案,但仍然没有

Warning: Missing argument 1 for FOS\UserBundle\Form\Type\RegistrationFormType::__construct(), called in C:\xampp\htdocs\symfony-bootstrap\src\sava\UserBundle\Controller\VerUsuarioController.php on line 77 and defined in C:\xampp\htdocs\symfony-bootstrap\vendor\friendsofsymfony\user-bundle\FOS\UserBundle\Form\Type\RegistrationFormType.php on line 25

Notice: Undefined variable: class in C:\xampp\htdocs\symfony-bootstrap\vendor\friendsofsymfony\user-bundle\FOS\UserBundle\Form\Type\RegistrationFormType.php on line 27

我的services.yml

# src/Acme/UserBundle/Resources/config/services.yml
services:
    sava_user.registration.form.type:
        class: sava\UserBundle\Form\RegistroTypes
        arguments: [%fos_user.model.user.class%]
        tags:
            - { name: form.type, alias: sava_user_registration }

这是我的config.yml

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: "@savaUserBundle/Resources/config/services.yml" }
framework:
    #esi:             ~
    translator:      { fallback: %locale% }
    secret:          %secret%
    router:
        resource: "%kernel.root_dir%/config/routing.yml"
        strict_requirements: ~
    form:            ~
    csrf_protection: ~
    validation:      { enable_annotations: true }
    templating:
        engines: ['twig']
        #assets_version: SomeVersionScheme
    default_locale:  "%locale%"
    trusted_proxies: ~
    session:         ~
    fragments:       ~
    http_method_override: true

# Twig Configuration
twig:
    debug:            %kernel.debug%
    strict_variables: %kernel.debug%
    form:
        resources:
            - 'MopaBootstrapBundle:Form:fields.html.twig'

# Assetic Configuration
assetic:
    debug:          %kernel.debug%
    use_controller: false
    filters:
        less:
            node: /Arturo/bin/node
            node_paths: [/Arturo/lib/node_modules]        
 #       lessphp:
 #           node: ["C:\\Program Files\\nodejs\\node.exe"]
 #           node_paths: ["C:\\Users\\Arturo\\AppData\\Roaming\\npm\\node_modules"]
            apply_to: "\.less$"
        cssrewrite: ~
        cssembed:
            jar: %kernel.root_dir%/Resources/java/cssembed-0.3.6.jar
            apply_to: "\.css$|\.less$"
        yui_css:
            jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.6.jar
            apply_to: "\.css$"
        yui_js:
            jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.6.jar

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8
        # if using pdo_sqlite as your database driver, add the path in parameters.yml
        # e.g. database_path: %kernel.root_dir%/data/data.db3
        # path:     %database_path%
    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true

# Swiftmailer Configuration
swiftmailer:
    transport: %mailer_transport%
    host:      %mailer_host%
    username:  %mailer_user%
    password:  %mailer_password%
    spool:     { type: memory }


fos_user:
    db_driver: orm
    firewall_name: main
    user_class: sava\UserBundle\Entity\User
    registration:
        form:
            type: sava_user_registration

这是我的控制分数

  public function modificarUserAction(Request $request,$id) {
    $em = $this->getDoctrine()->getManager();  
    $User = $em->getRepository('savaUserBundle:User')->find($id);
    $formulario = $this->createForm(new \sava\UserBundle\Form\RegistroType(),$User);
    $formulario->handleRequest($request); 
        if ($request->getMethod() == 'POST') {       
                        $em = $this->getDoctrine()->getManager();
                        $em->persist($User);
                        $em->flush();
                        return $this->forward('savaUserBundle:VerUsuario:vertodos');
    }
    else 
    {
     return $this->render('savaUserBundle:Default:modificarUser.html.twig', array(
     'formulario' => $formulario->createView(),'User'=> $User 
     ));
    }

它的工作正常,但我不断得到这些错误,并且不知道如何摆脱它们。

1 个答案:

答案 0 :(得分:5)

对于不熟悉依赖注入容器的人来说,这是一个非常常见的问题。您定义了服务,但随后使用新的RegistroType()来创建实例。我们的想法是,php会以某种方式意识到你想要一个服务并使用容器。不。新的' operator对服务容器一无所知,只是尝试创建一个没有任何参数的新实例。因此错误信息。

您显然已将#34;定义表单类型定义为服务"部分(http://symfony.com/doc/current/book/forms.html#defining-your-forms-as-services),我可以看到你的困惑来自哪里。手册可能会更清晰一些。

底线是您需要使用表单类型的别名而不是新运算符:

// Replace
$formulario = $this->createForm(\sava\UserBundle\Form\RegistroType(),$User);

// With
$formulario = $this->createForm('sava_user_registration',$User);

第一次尝试时会出现不同的错误。你的服务定义中有一个拼写错误,但我会留给你调试。