2014-03-26 4 views
0

내가 Zend2에 새로운 오전에 다른 PHTML보기로 폼을 연결하는 방법 :젠드 프레임 워크 2

내가 양식을 가지고 있고, 첫 번째 단계에 나는 새로운 ViewModel을 만들고 반환 :

return new ViewModel(array('form' => $form, 'messages' => $messages)); 

데이터가 브라우저에서 돌아 오는 후 단계에서이 동일한 양식을 새보기 (동일한 요소가 더 많거나 많을 수도 있음)에 연결하거나 다른 양식을 작성한 다음 이전 양식의 데이터 및 보여줄 새로운 시각과 관련 시키시겠습니까?

도움을 주시면 감사하겠습니다.

는 편집 :

$ 형상 ->의 setAttribute ('액션', $ this-> URL ('인증/인덱스/로그인-post.phtml'

나는 다음을 수행하려고));

그러나 여전히 이전 것을 보여줍니다.

내가 할 때 :

반환 $ this-> (재 지정) -> toRoute ('인증/기본', 배열 ('컨트롤러'=> '인덱스', '행동'=> 'login- 게시하다'));

오류 페이지가 나타납니다 : 요청한 컨트롤러가 요청을 발송하지 못했습니다.

다른보기를로드해야하는 요청의 게시물이 표시되면 어떤보기가 어떤 양식에 연결되어 있는지 지정하는 방법은 무엇입니까?

+1

정확히 무엇을하려합니까? [The Documentation] (http://zf2.readthedocs.org/en/latest/#zend-form)은'Zend \ Form'을 아주 잘 다루고 있습니다. "다단계 양식"에 대해 말하면 세션 내에서 이전 양식 데이터를 저장해야합니다. – Sam

+1

@Sam 다른 뷰를로드해야하는 요청의 게시물을 얻었을 때, 어떤 뷰가 어떤 형식으로 어떻게 표시되는지 지정할 수 있습니까? – GingerHead

+0

나는 아직도 네가하고 싶은 일에 대해 확신이 없다. 일반적으로 양식을 게시하고 양식이 유효하지 않으면 오류 메시지를 포함한 양식으로 리디렉션됩니다. 양식이 유효하면 데이터가 데이터베이스에 삽입 된 다음 다른 페이지로 리디렉션됩니다. 정확히 무엇을하려고하는지, "다른보기를로드하십시오"라고 말하지 말고, 접근 방식의 개념을 말해주십시오. – Sam

답변

0

양식 자체가보기에 대한 지식이 없습니다. 양식 제출을 완료 한 후보기를 변경하려면, 이 새로운보기가 아마도 다른 양식을 제공 할 때, 이것은 컨트롤러 내에서 수행되어야하는 것입니다.

다른보기를 반환하는 방법에 대한 몇 가지 옵션이있는 (작동하지 않는) 예제입니다.

내가 질문을 형성 이해하는 것과
class FooController extends AbstractActionController 
{ 

    public function getFooForm() 
    { 
     return $this->getServiceLocator()->get('Form\Foo'); 
    } 

    public function getBarForm() 
    { 
     return $this->getServiceLocator()->get('Form\Bar') 
    } 


    public function fooAction() 
    { 
     $request = $this->getRequest(); 
     $form = $this->getFooForm(); 

     if ($request->isPost()) { 
      $form->setData($request->getPost()); 

      // Is the posted form vaild 
      if ($form->isValid()) { 

       // Forms validated data 
       $data = $form->getData(); 

       // Now there are a few options 

       // 1. Return a new view with the data 
       $view = new ViewModel($data); 
       $view->setTemplate('path/to/file'); 

       return $view; 

       // OR Option 2 - Redirect 

       return $this->redirect()->toRoute('bar', $someRouteParams); 


       // Option 3 - Dispatch a new controller action 
       // and then return it's view model/response 

       // We can also pass on the posted data so the controller 
       // action that is dispathed will already have our POSTed data in the 
       // request 
       $request->setPost(new \Zend\Stdlib\Parameters($data)); 

       return $this->forward()->dispatch('App\Controller\Foo', array('action' => 'bar')); 

      } 
     } 
     // Render default foo.phtml or use $view->setTemplate('path/to/view') 
     // and render the form, which will post back to itself (fooAction) 
     return new ViewModel(array('form' => $form)); 
    } 


    public function barAction() 
    { 
     $request = $this->getRequest(); 
     $form = $this->getBarForm(); 

     if ($request->isPost()) { 
      $form->setData($request->getPost()); 
      // ....  
     } 

     // Renders the bar.phtml view 
     return $this->viewModel(array('form' => $form)); 
    } 

} 

, 당신은 이미 데이터를 검증 것와 두 번째 폼을 채워야 새보기로 옵션 3을 사용하고있을 필요가있다.

0

편집보기와 같은 것을 말하는 경우에는 개체를 양식에 바인딩하면됩니다.

$form->bind($yourObject); 

http://zf2.readthedocs.org/en/latest/modules/zend.form.quick-start.html#binding-an-object

그렇지 않으면 당신은 그것을 설정하여 사용하는 컨트롤러 액션 폼 게시물을 만들 수 있습니다

$form->setAttribute('action', $this->url('contact/process')); 

을 어쩌면 당신은 더 많은 특성을 가지고 내가 확신 어떤 코드를 게시 좀 더 자세한 답변을 얻을 것입니다

+0

지금 $ yourObject는 양식에 할당 할 새로운 데이터를 보유하고있는 정상적인 배열입니까? 연락처/프로세스는 어떻게됩니까? 내 생각이야? 보기/연락처/process.phtml 같은가요? – GingerHead

+1

다음과 같은 작업을 시도했습니다. $ form-> setAttribute ('action', $ this-> url ('auth/index/login-post.phtml')); 원래의 반환 값은 다음과 같습니다 : 새로운 ViewModel (array ('form'=> $ form, 'messages'=> $ messages))을 반환하고 이전 페이지를 보여줍니다. – GingerHead

+1

제 EDIT보세요 – GingerHead

관련 문제