【问题标题】:Warning: Missing argument 1 for FOS\UserBundle\Form警告:FOS\UserBundle\Form 缺少参数 1
【发布时间】:2014-12-14 06:54:39
【问题描述】:

我收到此警告,但似乎无法找到解决方案,我尝试了各种答案,但仍然一无所获

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

我的服务.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 
     ));
    }

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

【问题讨论】:

    标签: php forms symfony fosuserbundle


    【解决方案1】:

    对于刚接触依赖注入容器的人来说,这是一个非常常见的问题。您定义了服务,但随后使用 new RegistroType() 创建实例。想法是 php 会以某种方式意识到您需要服务并使用容器。没有。 'new' 操作符对服务容器一无所知,只是尝试在没有任何参数的情况下创建一个新实例。因此出现错误消息。

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

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

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

    您第一次尝试此操作时会遇到不同的错误。您的服务定义中有错字,但我会留给您调试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 2012-03-04
      • 2013-09-15
      • 1970-01-01
      相关资源
      最近更新 更多