1

以下のようにsymfony2にコントローラーがあります。ユーザーフォームが有効な場合、他のリンクにリダイレクトされますが、エラーがある場合は同じページに残り、エラーが表示されます。クライアント側の検証が無効になっていて、サーバー側の検証のみがエラーをチェックしている一般的なシナリオです。

/**
 * Creates a new User entity.
 *
 * @Route("/create", name="admin_user_create")
 * @Method("post")
 * @Template("UserBundle:User:new.html.twig")
 */
public function createAction()
{
    $entity  = new User();
    $request = $this->getRequest();
    $form    = $this->createForm(new UserType() , $entity);

    $form->bindRequest($request);
    if($form->isValid())
    {
        // DO SOMETHING ... 
        return $this->redirect($this->generateUrl('some_link' , array( 'user_id' => $entity->getId() )));
    }

    // If the form is NOT valid, it will render the template and shows the errors.   
    return array(
        'entity' => $entity ,
        'form'   => $form->createView()
    );
}

シナリオは次のようになります。

  1. ユーザーがフォームに無効なデータを入力しました
  2. ユーザーがフォームを送信する
  3. フォームが有効かどうかをコントローラーがチェックする
  4. 有効でないため、この場合はテンプレートをレンダリングします

    @Template("UserBundle:User:new.html.twig")
    
  5. ブラウザのルートは/create
  6. ユーザーclickがブラウザのリンクを使用していて、そうでない場合post、エラーが発生します

どうすればこれを修正できますか? もう一度リダイレクトする必要がありますか? メソッドなので、postリダイレクトすることは可能ですか?

4

3 に答える 3

2

@Method("POST") を指定せず、メソッドでこれを行います。

if ($request->getMethod() == 'POST')
{
    $form->bindRequest($request);
    if($form->isValid())
    {
        // DO SOMETHING ... 
        return $this->redirect($this->generateUrl('some_link' , array( 'user_id' => $entity->getId() )));
    }
}
于 2012-07-18T17:42:15.300 に答える
0
/**
 * Creates a new User entity.
 *
 * @Route("/create", name="admin_user_create")
 * @Method("GET|POST")
 * @Template("Use`enter code here`rBundle:User:new.html.twig")
 */
public function createAction()
{
    $entity  = new User();
    $request = $this->getRequest();
    $form    = $this->createForm(new UserType() , $entity);
// Is this POST? Bind the form...
if('POST' == $request->getMethod()) $form->bindRequest($request);

// GET or from not valid? Return the view...
if('GET' == $request->getMethod() || !$form->isValid()) :
    return array(
        'entity' => $entity ,
        'form'   => $form->createView()
    );
endif;

// Success, then persist the entity and redirect the user
return $this->redirect($this->generateUrl('some_link',
    array('user_id' => $entity->getId()))
);

}

于 2014-03-06T03:13:22.190 に答える
0

あなたは受け入れるGETPOST、何かをすることができます リンク:

/**
 * Creates a new User entity.
 *
 * @Route("/create", name="admin_user_create")
 * @Method("GET|POST")
 * @Template("UserBundle:User:new.html.twig")
 */
public function createAction()
{
    $entity  = new User();
    $request = $this->getRequest();
    $form    = $this->createForm(new UserType() , $entity);

    // Is this POST? Bind the form...
    if('POST' == $request->getMethod()) $form->bindRequest($request);

    // GET or from not valid? Return the view...
    if('GET' == $request->getMethod() || !$form->isValid()) :
        return array(
            'entity' => $entity ,
            'form'   => $form->createView()
        );
    endif;

    // Success, then persist the entity and redirect the user
    return $this->redirect($this->generateUrl('some_link',
        array('user_id' => $entity->getId()))
    );
}
于 2012-07-19T09:12:14.437 に答える