2014-10-19 3 views
0

Im получать это предупреждение и не могу показаться, чтобы найти решение, я попробовал различные ответы, но все еще ничегоПредупреждение: Отсутствует аргумент 1 для ФОС UserBundle Form

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 каким-то образом поймет, что вы хотите получить сервис и использовать контейнер. Неа. «Новый» оператор ничего не знает о контейнере службы и просто пытается создать новый экземпляр без каких-либо параметров. Отсюда сообщение об ошибке.

Очевидно, что вы читаете раздел «Определяющий тип формы как услуга» (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

Смежные вопросы