2016-09-22 5 views
0

DataObject이없는 경우 작동 할 수있는 양식이있는 SilverStripe (3.4) 페이지가 있습니다.SS_HTTPRequest를 문자열로 변환 할 수 없습니다.

public function AntwortForm($ID) { 

    $Nummer = Vortest_Fragen::get()->byID($ID); 
    if ($Nummer) { 
     $Art=$Nummer->Art; 
    } 
    if ($Art == 'Normal') { 
     $fields = new FieldList(
      TextAreaField::create('Antwort'), 
      HiddenField::create('ID', 'ID', $ID), 
      HiddenField::create('VortestID', 'VortestID', $this->request->param('ID')), 
      HiddenField::create('Aktion', 'Aktion', $this->request->param('Action')) 

     ); 
    } else { 
     $Optionen = explode(';', $Nummer->Optionen); 
     $a = 'A'; 

     for ($i = 0 ; $i < count ($Optionen); $i++) { 
      $Op[$a] ='<div style="width:25px;display:inline;">' . $a . ')</div> ' . $Optionen[$i]; 
      $a++; 
     } 

     $fields = new FieldList(
      CheckboxSetField::create('Antwort', 'Antwort', $Op), 
      HiddenField::create('ID', 'ID', $ID), 
      HiddenField::create('VortestID', 'VortestID', $this->request->param('ID')), 
      HiddenField::create('Aktion', 'Aktion',$this->request->param('Action')), 
      HiddenField::create('Art', 'Art', $Nummer->Art) 
     ); 
    } 
    $actions = new FieldList(
     FormAction::create('AntwortEintragen', 'Eintragen') 
    ); 

    $form = new Form($this, 'AntwortForm', $fields, $actions); 
    return $form; 
} 

function AntwortEintragen($data, $form) { 
    $Antwort = Vortest_Antwort::get()->filter(array('FrageID' => $data['ID'], 'SchreiberID' => Member::currentUserID())); 
    foreach($Antwort as $item) { 
     $item->delete(); 
    } 

    foreach ($data['Antwort'] as $Antwort) { 
     $Ant .= $Antwort . ','; 
    } 
    $Antwort = new Vortest_Antwort(); 

    if ($data['Antwort']) { 
     $form->saveInto($Antwort); 
     if ($data['Art'] == 'Mechanics') { 
      $Antwort->Antwort = $Ant; 
     } 
     $Antwort->SchreiberID = Member::currentUserID(); 
     $Antwort->FrageID = $data['ID']; 
     $Antwort->write(); 
    } 
    $VID = $data['VortestID']; 
    if ($data['Aktion'] == 'AlleFragen') { 
     $this->redirect('/vortest/AlleFragen/' . $VID . '#' . $data['FrageNr']); 
    } elseif ($data['Aktion'] == 'Einzelfrage') { 
     $this->redirect('/vortest/Einzelfrage/' . $VID); 
    } else { 
     $this->redirect('/vortest/Test/' . $VID.'#' . $data['FrageNr']); 
    } 
} 

내가이 줄 $Nummer = Vortest_Fragen::get()->byID($ID);

에 숫자로 $ID을 변경할 때 다음과 같은 오류 얻을 내가 그것을 변경하지 않으면 의미가 있습니다 : 어떻게이

[Recoverable Error] Object of class SS_HTTPRequest could not be converted to string 

수정합니까 문제?

+1

전자 들여 쓰기 코드, 쉽게 독일어 이외의 사람들이 코드를 읽고 흐름의 요지를 빨리 얻으려면 ID도 거기에서 모든 불필요한 코드를 제거하십시오. 어쨌든 오류는 아주 자명하다 : AntwortForm ($ ID) <$ ID로 명명 변수는 그 ID가 var dump ($ id)라면 아마 SS_HTTPRequest 유형이라는 것을 의미하지는 않는다. $ this-> request-> param ("ID")이 올바른 값을 가지고 있지 않습니까? –

+0

비슷한 문제가 있습니다. 해결책은 다음과 같습니다. http://stackoverflow.com/a/37874804/4363418 –

+0

가능한 [컨트롤러 확장자 ​​내 양식 제출 - SilverStripe 3.4.0] (http://stackoverflow.com/questions/37874714/submit-form-within) -controller-extension-silverstripe-3-4-0) –

답변

0

실버 스트라이프는 명확하게 문서화되어 있지 않지만 컨트롤러에 요청 인수를 전달하고 메소드를 작성합니다. $ ID 인수는 실제로 생각한 것과 다르며 실제로 Silverstripe가 전달한 SS_HTTPRequest 객체라는 것을 알게 될 것입니다.

public function AntwortForm($ID) {

사람 : :이 문제를 해결하려면

은, 첫 번째 줄 변경

public function AntwortForm($request, $ID) {

을 그리고 당신이이 방법을 부르는 어디서나 업데이트합니다 -)