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. 従業員登録の詳細のみを入力し、そのためのログインを作成する必要はありません。

したがって、2番目のオプションが機能せず、列'username'をnullにすることはできません。この問題を解決するにはどうすればよいですか。

4

2 に答える 2

1

2番目の質問に答えるには、addEmployeeActionで、新しい従業員にユーザーを追加せず、次の行を削除します。

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

現在、$ employeeはユーザー名を持たない空のユーザーで保存されているため、MySQLは不幸です!これらの行を削除すると、フォームに入力した場合にのみユーザーが作成されます。

于 2012-09-03T19:28:21.500 に答える
0

SQL フィールドをオプションに設定する場合は、null 許容オプション true を追加します。

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

しかし、あなたの場合、ユーザー名なしでユーザーを登録したようです。これは論理的ではありません...ユーザー名フィールドが正常に機能していない可能性があります。詳細を教えてください。

于 2012-09-03T16:01:39.670 に答える