2017-05-22 10 views
2

첫째로, 나는 당신이 내 나쁜 영어로 용서해주기를 바랍니다. 두 번째로, 나는 모든 것이 인터넷에 있다는 것을 안다! 그러나 이번에는 내가 원하는 것을 찾지 못했습니다.symfony 양식을 통해 특정 교리 객체로드하기

나는 현재 심포니 프레임 워크 (V3)와 함께 일하고 있어요 :

여기 문맥의 약간이다.

내가 두 엔티티 가지고 :

  • 오류를 그들의 관계는 일대가 하나 개의 errorCode는 많은 오류에 연결 만 할 수있다

  • 의 errorCode는

    하나의 오류는 수 하나의 errorCode가 있습니다.

    errorCode 테이블은 데이터베이스 관리자가 수동으로 입력합니다.

    errorType 
        ->errorCodeType 
    

    errorCodeType 테이블의 주 키는 아니지만 내가 오류보고시 입력됩니다 무엇입니까 3 개 개의 서브 코드 필드 (integerType)를 포함 :

    나는 중첩 된 formTypes의 folowing 구조를 가지고있다.


    내 문제 : 해당하는 errorCode를 인스턴스가 데이터베이스에서 발견되지 않은 경우로드 양식을 제출 한 후 올바른 errorCode를 연결하고 필드에 오류가 발생하는 방법

    .


    내 제약 :

    • 데이터베이스 구조 (I 그 바보 알고 있지만 기존의 데이터베이스와 함께 작동하도록 있는데 정말 인해 어떤 전망을 생성 할 수 없습니다 intolerant 데이터베이스 관리자).
    • PHP - 5.6.30 (서버 및 사물을 알고 있음 ...))).


    솔루션은 예상 :

    • 데이터 변압기 (나는 정말 여러 입력을 사용할 수 있다고 생각하지 않습니다).
    • 사용자 정의 유효성 검사기 (글쎄,이 솔루션을 수 있지만 그것을 사용하는 방법을 모르겠다 및 엔터티 필드를 설정하는 방법을 설명하는 모든 문서를 여러 가지 입력을 사용하는 방법을 찾을 수 없습니다.)
    • 이벤트 리스너 (동일하지만 실제 사용 사실을 알지 못하고 올바른 필드에 유효성 검사 오류를 표시하는 방법을 알지 못함).

    글쎄, 그 중 하나에 해결책이있을 수도 있지만 제대로 사용할 수있는 방법이 없다고 생각합니다.


    어쨌든, 불쌍한 내 영어 죄송합니다 다시, 당신의 도움을 주셔서 감사하고 좋은 하루/저녁이있다.



    편집 :

    내 ERRORTYPE 양식 :

    $builder->add('code', CollectionType::class, array(
        'entry_type' => ErrorCodeType::class, 
        'allow_add' => false, 
        'allow_delete' => false, 
        'required'=>true, 
    )); 
    
    $builder->add('operatorAnnotation', TextType::class, array('label'=>'compléments','required'=>true)); 
    

    내 errorCodeType 양식 :

    $builder->add('aSubcode1', IntegerType::class, array('label'=>'Code de catégorie','required'=>true)); 
    $builder->add('aSubcode2', IntegerType::class, array('label'=>'Code de classe','required'=>true)); 
    $builder->add('aSubcode3', IntegerType::class, array('label'=>'Code de détail','required'=>true)); 
    

    내 errorCode를 엔티티 :

    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 
    
    /** 
    * @ORM\Column(type="integer") 
    */ 
    private $aSubcode1; 
    
    /** 
    * @ORM\Column(type="integer") 
    */ 
    private $aSubCode2; 
    
    /** 
    * @ORM\Column(type="integer") 
    */ 
    private $aSubCode3; 
    
    /** 
    * @ORM\OneToMany(targetEntity="Error", mappedBy="code", cascade={"persist"}) 
    */ 
    private $errors; 
    
    /*.........More things.......*/ 
    

    내 오류 엔티티 : 그래서

    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 
    
    /** 
    * @ORM\Column(type="string", length=255, nullable=true) 
    */ 
    private $operatorAnnotation; 
    
    /** 
    * @ORM\ManyToOne(targetEntity="ErrorCode", inversedBy="errors", cascade={"persist"}) 
    */ 
    private $code; 
    
    /*.........More things.......*/ 
    
  • +0

    양식 유형을 표시 할 수 있습니까? 나는 그 문제가 무엇인지를 정말로 이해하지 못한다. –

    +0

    더 많은 정보를 가지고 제 질문을 편집했습니다.문제는 다음과 같습니다. 양식을 제출할 때 컨트롤러에서 수행하지 않고 올바른 기존 errorCode를 오류에 연결하는 방법 (해당 양식이없는 경우) errorCode가 발견되었습니다). 협조 해 주셔서 감사합니다. –

    답변

    0

    확인, 저를 도와 시도 당신에게 @Neok 감사합니다! 모두의

    먼저 내 양식과 나의 실체를 연결 해제 :

    나는 내가 원하는 것을 얻을 수있는 "유대인"방법을 찾아 냈다.

    그런 다음 ErrorCode 엔터티의 세 하위 코드 필드와 Error 엔터티의 다른 일부 필드를 포함하는 오류 (아직 연결되지 않음)에 대한 사용자 지정 양식을 만들었습니다. 내 취향에서 "게토").

    그 후, 나는 내 컨트롤러에서 양식을 사로 잡았과 ErrorCode가 엔티티를로드 배수 쿼리를 실행되거나 가능하지 않을 경우,

    (하나가 유효하지 않은) 나에게 문제가주는 어떤 필드 발견했습니다 그런 다음 프로세스가 두 가지 경로를 취

    • 을 모두가 유효하면, 나는 (ID가 URL (두 번째 "게토"부분)을 통해 전송) 및 캐스케이드 내 오류를 계속 내 오류 내 발견 ErrorCode가 연결 .

    • 뭔가 잘못되면, ($ myForm-> get ([MyField]) -> addError ([MyError])) ("게토"라고 생각하는 세 번째 것)를 사용한 다음 양식을 다시 보냅니다.

    누군가가 더 좋은 해결책을 찾으면 나는 그것을 듣고 싶습니다. 그러나 나는 발견 한 것을 제시하는 것이 좋은 것이라고 생각했습니다.

    내 영어 문법, 구문, 어휘가 눈을 피로하게 만드는 경우 내 게시물에 에디션을 신청할 수 있습니다.