2013-06-24 2 views
0

나는 잘못된 방향으로 가고 있다고 확신하지만 sfWidgetFormChoice에서 내 선택 사항 중 하나에서 배열 키를 해제해야합니다. 해당 변수를 Form으로 가져 오는 유일한 방법은 작업에서 가져 오는 것입니다. 여기에 내가 가진 무엇 :액션에서 폼으로 변수를 전달하는 방법

작업 :

$id = $request->getParameter('id'); 
$deleteForm = new UserDeleteForm(); 
$choices = array(); 
$choices = $deleteForm->getWidgetSchema('user')->getAttribute('choices'); 
unset($choices[$id]); //I obviously don't want the user to be able to transfer to the user being deleted 
$this->deleteForm = $deleteForm; 

형태 :

$users = Doctrine_Core::getTable('sfGuardUser')->getAllCorpUsers()->execute(); 
$names = array(); 
    foreach($users as $userValue){ 
     $names[$userValue->getId()] = $userValue->getProfile()->getFullName(); 
    }; 
//  unset($names[$id]); //this works, but I can't figure out how to get $id here. 
    $this->widgetSchema['user'] = new sfWidgetFormChoice(array(
     'choices' => $names 
    )); 
    $this->validatorSchema['user'] = new sfValidatorChoice(array(
     'required' => true, 
     'choices' => $names 
    )); 
+0

왜 symfony2에 태그를 지정 했습니까? – cheesemacfly

+0

symfony2 사용자가 1.4로 시작한 이유가 있습니다. 나는 가능한 한 내 질문에 많은 노출을 찾고있다. – Patrick

+2

대신 [a bounty] (http://stackoverflow.com/help/bounty)를 사용해야합니다. 관련성없는 태그를 질문에 추가하면 가시성을 얻을 수 없습니다. – cheesemacfly

답변

3

이해 형태와 행동 :
보통 우리가 설정 필드가있는 양식을하는 HTML에 인쇄합니다 페이지로 이동하고 데이터로 양식을 채우십시오. 제출 양식 버튼을 누르면 모든 데이터가 양식 action html 속성에 정의 된 메소드로 전송됩니다.
이 메서드는 많은 매개 변수와 함께 데이터를 사용하여 $request을 받고받습니다. 해당 값은 조치에서 처리됩니다.

  • 당신이 위 한 것 같이, 정의 및 설정 심포니 양식 :

    는 정확히 심포니에서 어떻게 작동하는지 볼 수 있습니다. 양식을 인쇄하고에 동작 매개 변수 지점에 하여 요청을받을 방법 를 제출

    <form action="currentModuleName/update"

  • 심포니가 자동으로 모듈의 action.class.php 에 요청을 보낼 것입니다, 그리고를 찾습니다 및 기능 executeUpdate

    공공 기능 executeUpdate의 (sfWebRequest $ 요청) {로 데이터를 전송// ...
    $ this-> form = new TestForm ($ doctrine_record_found);
    $ this-> processForm ($ request, $ this-> form); }

  • 일부 확인 후, 심포니 형태를 처리하고 그 결과를 템플릿을 설정한다.

    processForm (sfWebRequest $ 요청, sfForm $ 양식) {...}
    $ this-> setTemplate ('편집'); 모듈 action.class.phpprocessForm에서

, 당신은 또한 양식의 모든 수신 된 값 (요청)을 처리해야

protected function processForm(sfWebRequest $request, sfForm $form) 
    { 
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName())); 
    if ($form->isValid()) 
    { 
     $formValues = $this->form->getValues(); 
     $Id = $formValues['yourWidgetName']; 
    } 
    } 


당신은 예를 들어 다음과 같은 link을 확인 할 수 있습니다 귀하의 질문처럼 sfWidgetFormChoice을 처리하는 방법에 대해 알아보십시오.

//process the form, bind and validate it, then get the values. 
$formValues = form->getValues(); 
$choicesId = $formValues['choices']; 



패스 변수를 행동에서 양식 :
변명 액션에 다음 코드를 추가, 삭제 된 사용자를 선택하기 위해, 실제 질문에 대답
그리고 지금 만약 당신의 질문을 전혀 이해하지 못했지만 액션에서 폼으로 매개 변수를 전달해야 할 경우 배열의 초기화 변수를 폼 생성자에게 보냅니다.
Pass a variable to a Symfony Form
귀하의 경우, 사용자 목록을 가져와 원하는 사용자를 삭제하고 삭제되지 않은 사용자를 양식 생성자에게 보내십시오.
양식의 초기화를 변경할 수 있도록 configure() 함수에서 양식을 다시 선언/다시 작성해야합니다. 동일한 코드를 복사하여 configure() 함수에 붙여넣고 다음 줄을 주석으로 처리합니다. // parent :: setup();

class TbTestForm extends BaseTbTestForm 
{ 
    public function configure() 
    { 
     //.. copy here the code from BaseTbTestForm 
     //parent::setup(); 
     $vusers = $this->getOption('array_nondeleted_users'); 
     //now set the widget values with the updated user array. 
    } 
} 
+0

그 질문에 어떻게 대답합니까? –

+0

죄송합니다. 끝내기 전에 실수로 답장을 보냈습니다. 임은 여전히 ​​대답을 수정합니다. – xtrm

+0

예 - 지금 보입니다 : 나는 마지막 부분이 OP에 가장 유용하다고 생각합니다. –

관련 문제