2012-12-13 76 views
0

我已經直接修改了FOSUserForm(沒有壓倒一切的),試圖指定一個默認值,而建築形式,我已經添加了默認值:數據選項不工作

array('data'=>'default value') 

這樣如:

namespace FOS\UserBundle\Form\Type; 

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

class RegistrationFormType extends AbstractType 
{ 
private $class; 

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

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('username', null, array('data' => 'Default value','label' => 'form.username', 'translation_domain' => 'FOSUserBundle')) 
     ->add('email', 'email', array('data' => 'Default value','label' => 'form.email', 'translation_domain' => 'FOSUserBundle')) 
     ->add('plainPassword', 'repeated', array(
      'type' => 'password', 
      'options' => array('translation_domain' => 'FOSUserBundle'), 
      'first_options' => array('label' => 'form.password'), 
      'second_options' => array('label' => 'form.password_confirmation'), 
      'invalid_message' => 'fos_user.password.mismatch', 
     )) 
    ; 
} 

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => $this->class, 
     'intention' => 'registration', 
    )); 
} 

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

它不工作,我一直有一個表單驗證消息「請輸入用戶名」 出了什麼問題?

回答

1

您是否嘗試將用戶名設置爲隱藏字段而不是「null」?或者完全從表單中刪除用戶名,並在實體保存在數據庫中之前手動設置。除非在將用戶名保存到數據庫之前執行了檢查以確保用戶名是唯一的,否則我不推薦第二種選擇。

編輯:

出於好奇,你爲什麼直接修改供應商類?

編輯2:

輸入用戶名字段的默認驗證可能不應該被刪除(如果你這樣做,確保它仍然是在數據庫(http://symfony.com/doc一個獨特的領域/2.0/reference/constraints/UniqueEntity.html)

如果你想設置一個默認的用戶名值,而不是設置在表單中的數據選項,創建覆蓋缺省的createUser方法自定義RegistrationFormHandler:

<?php 

namespace Acme\UserBundle\Form\Handler; 

use FOS\UserBundle\Form\Handler\RegistrationFormHandler as BaseHandler; 

class RegistrationFormHandler extends BaseHandler 
{ 
    /** 
    * @return UserInterface 
    */ 
    protected function createUser() 
    { 
     $user = $this->userManager->createUser(); 
     $user->setUsername('customusername'); 

     return $user; 
    } 
} 

上覆蓋這個處理器

說明可以在這裏找到(朝底部): https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_forms.md

這很簡單,只需要一分鐘來實現。此外,創建自定義窗體處理程序還可以防止在通過作曲家更新供應商時,您在供應商類中所做的任何更改都不會丟失。

編輯3:

DependencyInjection \ EtienneUserExtension.php:

<?php 

namespace Etienne\UserBundle\DependencyInjection; 

use Symfony\Component\DependencyInjection\ContainerBuilder; 

//if using xml 
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; 

//if using yaml 
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; 

use Symfony\Component\HttpKernel\DependencyInjection\Extension; 
use Symfony\Component\Config\FileLocator; 

class EtienneUserExtension extends Extension 
{ 
    public function load(array $configs, ContainerBuilder $container) 
    { 
     //if using XML 
     $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 
     $loader->load('services.xml'); 

     //or if using yaml services 
     $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 
     $loader->load('services.yml'); 
    } 

    public function getAlias() 
    { 
     return 'etienne_user'; 
    } 
} 

的services.xml您味精

<?xml version="1.0" ?> 

<container xmlns="http://symfony.com/schema/dic/services" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> 


<services> 
    <service id="acme_user.form.handler.registration" class="Acme\UserBundle\Form\RegHandler" scope="request" public="false"> 
     <argument type="service" id="fos_user.registration.form" /> 
     <argument type="service" id="request" /> 
     <argument type="service" id="fos_user.user_manager" /> 
     <argument type="service" id="fos_user.mailer" /> 
     <argument type="service" id="fos_user.util.token_generator" /> 
    </service> 
</services> 

</container> 
+0

以及感謝名單...我不是要刪除的用戶名.. 。我試圖刪除用戶名驗證信息,當我打開表單視圖 – Matoeil

+0

時,爲什麼直接修改供應商類?因爲它是緊急的,我沒有設法覆蓋形式 – Matoeil

+0

這裏的重點是,我把一個數據選項,不工作 – Matoeil