0

我有如下的员工登记表,

namespace Hrm\EmployeeBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Hrm\UserBundle\Form\User\UserForm;

class EmpForm extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{   
    $builder->add('id','hidden');
    $builder->add('firs_name', 'text');
    $builder->add('middle_name', 'text');
    $builder->add('last_name', 'text');     
    $builder->add('user', new UserForm(), array('required' => false));
}

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

}

我还有一个如下的用户登录表单,

namespace Hrm\UserBundle\Form\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class UserForm extends AbstractType
{
  public function buildForm(FormBuilder $builder, array $options)
  {   
    $builder->add("id","hidden",array("required"=>false));
    $builder->add("userName","text",array("label"=>"Username"));
    $builder->add("password","password",array("label"=>"Password"));
    $builder->add("confirmPassword","password",array("property_path" => 
                   false,"label"=>"Confirm Password"));
    $builder->add("email","email",array("label"=>"Email"));
  }

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

员工 YML 文件如下所示,

Hrm\EmployeeBundle\Entity\Employee:
type: entity
table: employee
fields:
  id:
    type: integer
    id: true
    generator:
      strategy: AUTO
  firs_name:
    type: string
    length: '255'
    default: null
  middle_name:
    type: string
    length: '255'
    default: null
  last_name:
    type: string
    length: '255'
    default: null  
  oneToOne:
    User:
      targetEntity: Hrm\UserBundle\Entity\User
      cascade: ["remove", "persist"]
      joinColumn:
        name: login_id        
        referencedColumnName: id        
        nullable: true                   
 lifecycleCallbacks: {  }

员工控制器是这样的,

public function addEmployeeAction(Request $request) {

    $employee = new Employee();

    $user = new User();
    $employee->setUser($user);

    $form = $this->createForm(new EmpForm(), $employee);

    if ($request->getMethod() == 'POST') {

        $form->bindRequest($request);

        if ($form->isValid()) {

            $em = $this->getDoctrine()->getEntityManager();
            $em->persist($employee);
            $em->flush();

            return $this->redirect($this->generateUrl('HrmEmployeeBundle_homepage'));
        }
    }

    return $this->render('HrmEmployeeBundle:Pages:add.html.twig', array(
                'form' => $form->createView(), 'status' => 'addEmployee',
            ));
}

所以我需要做的是以下选项应该可用,

  1. 填写员工注册详细信息并创建登录名(这已经完成)
  2. 仅填写员工注册详细信息,无需为此创建登录信息。

所以第二个选项对我不起作用,它说 Column 'username' cannot be null 我怎样才能摆脱这个问题?

4

2 回答 2

1

要回答您的第二个问题,在您的 addEmployeeAction 中,不要在新员工上添加用户,删除这些行:

$user = new User();
$employee->setUser($user);

目前,$employee 是用一个没有用户名的空用户保存的,所以 MySQL 很不高兴!通过删除这些行,只有在填写表单时才会创建用户!

于 2012-09-03T19:28:21.500 回答
0

如果要设置 SQL 字段选项,请添加可为空选项 true:

oneToOne:
    User:
      targetEntity: Sys\UserBundle\Entity\User
      cascade: ["persist"]
      joinColumn:
        name: login_id
        referencedColumnName: id
        nullable: true

但是在您的情况下,您似乎注册了一个没有用户名的用户,这不合逻辑......也许用户名字段无法正常工作,请提供更多详细信息。

于 2012-09-03T16:01:39.670 回答