2014-10-19 115 views
0

即时得到此警告并不能似乎找到解决办法,我已经尝试了各种答案,但仍然没有警告:缺少参数1 FOS UserBundle 表

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 

这是我controlleraction

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

其工作正常,但我不断收到这些错误,并没有在如何摆脱他们的线索。

回答

5

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

您显然已阅读“定义表单类型作为服务”部分(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); 

你会得到一个不同的错误你第一次尝试。你的服务定义中有一个错字,但我会让你去调试。

+0

非常感谢,它像一个魅力。 – 2one2 2014-10-20 21:11:05