2017-12-05 9 views
0

ページコンテンツフォームを更新して永続オブジェクトを更新するとこのエラーが発生します。送信されたデータが無効です

enter image description here

コードハンドラ:コンテンツ機能のポスト私はハンドルにフォームを作成:

public function post(array $parameters, bool $submitted = false, array $options = []) 
     { 

      $recruiter = $this->formHandler->handle(
       $this->factory->create(), 
       $parameters, 
       Request::METHOD_POST, 
       $submitted, 
       $options 
      ); 
      if ($recruiter instanceof Recruiter) { 

      $this->repository->save($recruiter); 

      return $recruiter; 
     } 
    } 

コードコントローラー:ハンドラの利用機能のポストと私は試してみて、キャッチを使用します。

/** 
     * @Template() 
     * @Route("/register", name="register_recruiter") 
     * 
     * @param Request $request 
     * 
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse 
     */ 
     public function registerAction(Request $request) 
     { 
        try { 


       $quiz = $this->getHandler()->post($request->request->all()); 



       return $this->redirectToRoute('recruiter_quizs_index'); 

      } 
      catch (InvalidFormException $e) { 
       return [ 
        'form' => $e->getForm()->createView(), 
        'edit' => false, 
       ]; 
      } 

コード小枝コンテンツ形式:

{{ form(form) }} 

フォーム作成のための関数ハンドル:

public function handle($object, array $parameters, string $method, bool $submited = false, array $options = []) 
     { 
      $options = array_replace_recursive([ 
       'method' => $method, 
       'csrf_protection' => false, 
      ], $options); 
      $form = $this->formFactory->create(get_class($this->formType), $object, $options); 
      if (!$submited) { 

       throw new InvalidFormException($form); 
      } 
      $form->submit($parameters, 'PATCH' !== $method); 
      if (!$form->isValid()) { 
       throw new InvalidFormException($form); 
      } 

      return $form->getData(); 
     } 
+0

助けてくださいpease .... –

答えて

1

問題は、あなたが方法がPOST、PUTまたはPATCHであれば、おそらくtrueする必要があります第二パラメータ$submitted、のために価値を提供していないということです。

これは、アクションのメソッドをチェックして修正し、ブール・パラメータ

/** 
    * @Template() 
    * @Route("/register", name="register_recruiter") 
    * 
    * @param Request $request 
    * 
    * @return array|\Symfony\Component\HttpFoundation\RedirectResponse 
    */ 
    public function registerAction(Request $request) 
    { 
     try { 
      $submitted = ($request->isMethod('PATCH') || $request->isMethod('POST') || $request->isMethod('PUT')); 
      $quiz = $this->getHandler()->post($request->request->all(), $submitted); 
      return $this->redirectToRoute('recruiter_quizs_index'); 
     } 
     catch (InvalidFormException $e) { 
      return [ 
       'form' => $e->getForm()->createView(), 
       'edit' => false, 
      ]; 
     } 

を提供する簡単な方法は、私は、これは本当に悪いソリューションだと思いますが。 HTTPメソッドごとにアクションを作成する必要があります。 GETでフォームを表示し、POST/PUT/PATCHで送信します。提出ルートをGETルートの前に置いてください。最初に一致するようにしてください。

/** 
    * submit the recruiter form (on PATH, POST, PUT) 
    * 
    * @Template() 
    * @Route("/register", name="register_recruiter_submit", methods={"PATCH","POST","PUT"}) 
    * 
    * @param Request $request 
    * 
    * @return array|\Symfony\Component\HttpFoundation\RedirectResponse 
    */ 
    public function registerSubmitAction(Request $request) 
    { 
     try { 
      $quiz = $this->getHandler()->post($request->request->all(), true); 
      return $this->redirectToRoute('recruiter_quizs_index'); 
     } 
     catch (InvalidFormException $e) { 
      return [ 
       'form' => $e->getForm()->createView(), 
       'edit' => false, 
      ]; 
     } 
    } 

    /** 
    * show the recruiter form (route will match if method is not PATCH/PUT/POST 
    * 
    * @Template() 
    * @Route("/register", name="register_recruiter_form") 
    * 
    * @param Request $request 
    * 
    * @return array|\Symfony\Component\HttpFoundation\RedirectResponse 
    */ 
    public function registerFormAction(Request $request) 
    { 
     return [ 
      'form' => $this->formHandler->createView(), 
      'edit' => false, 
     ]; 
    } 
関連する問題