2013-06-04 4 views
2

Symfony2에서는 $ form-> bind()를 사용하여 플러시하기 전에 이전 항목과 새 항목을 비교해야합니다. 폼 바인딩 전에 개체 복제

나는 일부 기능을 시도 :

$command = $repository->findCommandProductsByCommand($id); 
$old_command = clone $command; 
// OR $old_command = $command; 
$form = $this->createForm(new EditCommandType(), $command); 

if($request->getMethod() == 'POST') 
{ 
    $form->bind($request); 
    if ($form->isValid()) 
    { 

을 그리고 나는이 같은 개체의 작은 부분을 저장하려고 :

$old_command = $command->getCommandProducts(); 

을하지만 난 $ old_command의 데이터에 액세스 할 때 이러한 메서드 중 하나는 폼에서 개체의 새로운 값에만 액세스하고 이전 개체에는 액세스하지 못하게합니다.

$ form-> bind ($ request)가 주된 문제이지만, exacly 무엇이 bind()를하는지 설명하는 문서를 찾지 못했습니다. 내 경우에 대한

솔루션

안부

$command_entries = new ArrayCollection(); 
foreach ($command->getCommandproducts() as $entry) { 
    $command_entries[] = clone $entry; 
} 

지금 내있는 ArrayCollection의 $의 command_entries 이전 기업에 연결되지 않은 (감사 zizoujab합니다). 복제 설명서에서

+0

바인드() 제출 된 데이터를 소요하고 당신이 개체를 전달하면 당신의 엔티티에 해당 세터에 그 값을 설정합니다

여기에 대한 자세한 설명 및 솔루션의 샘플입니다. 이전 데이터를 새 데이터와 비교하려고합니까? 예를 들어 암호 변경이 이전과 같은 암호를 사용하고 있지 않은지 확인하십시오. – Chausser

답변

3

는 :

객체가 복제되고

, PHP 5는 의 모든 객체의
속성의 단순 복사본을 수행합니다. 다른 변수에 대한 참조 인 모든 속성은 참조로 유지됩니다.

getCommandProducts()ArrayCollection을 반환하므로 항상 새 목록을 받게됩니다.

목록의 요소도 복제해야합니다. Symfony2/Doctrine: How to re-save an entity with a OneToMany as a cascading new row

+0

도움 주셔서 감사합니다! –