2017-01-11 39 views
0

我有一个Silex表单的问题。 (一个简单的测试)。Silex表单 - 方法错误(POST/GET)

注解来自包:https://github.com/danadesrosiers/silex-annotation-provider

这是我的函数:

/** 
    * @SLX\Route(
    *  @SLX\Request(method="GET", uri="add"), 
    *  @SLX\Bind(routeName="departement.add") 
    *) 
    */ 
    public function add(Application $app, Request $request) 
    { 
     $data = []; 
     $form = $app['form.factory']->createBuilder(FormType::class, $data) 
     ->add('nom_dep',null,array('label' => 'Nom :')) 
     ->getForm(); 

     $form->handleRequest($request); 

     if ($form->isValid()) { 
      $data = $form->getData(); 

      dump("test");die(); 
      return $app->redirect($app["url_generator"]->generate("departement.index")); 
     } 

     // display the form 
     return $app['twig']->render('departement/new.html.twig', array('form' => $form->createView())); 
    } 

这是我的看法:

{{ form_start(form, { 'attr': { 'class': 'form-horizontal form-condensed', 'role': 'form' } }) }} 
    <fieldset> 
    <legend>Création</legend> 
     <div class="row"> 
      <div class="col-sm-12"> 
       <div class="form-group"> 
        <label for="{{ form.nom_dep.vars.id }}" class="col-lg-2 control-label">Nom :</label> 
        <div class="col-lg-10"> 
         {{ form_widget(form.nom_dep,{'attr': {'class': 'form-control'}}) }} 
        </div> 
       </div> 
       <div style="margin-top: 50px;" class="form-group"> 
        <div class="col-lg-10 col-lg-offset-2"> 
        <input type="submit" value="Créer" class="btn btn-info" /> 
        </div> 
       </div> 
      </div> 
     </div> 
    </fieldset> 
{{ form_end(form) }} 

和表单的结果:

<form name="form" method="post" class="form-horizontal form-condensed" role="form"> 
    <fieldset> 
    <legend>Création</legend> 
     <div class="row"> 
      <div class="col-sm-12"> 
       <div class="form-group"> 
        <label for="form_nom_dep" class="col-lg-2 control-label">Nom :</label> 
        <div class="col-lg-10"> 
         <input type="text" id="form_nom_dep" name="form[nom_dep]" required="required" class="form-control"> 
        </div> 
       </div> 
       <div style="margin-top: 50px;" class="form-group"> 
        <div class="col-lg-10 col-lg-offset-2"> 
        <input type="submit" value="Créer" class="btn btn-info"> 
        </div> 
       </div> 
      </div> 
     </div> 
    </fieldset> 
<input type="hidden" id="form__token" name="form[_token]" value="CGhbs1VCxoJ1DFHkLKodt9bRaEZCH1JEoqYJh8TK7I8"></form> 

但是当我提交表单,我得到以下错误:

No route found for "POST /departement/add": Method Not Allowed (Allow: GET) 

这是正常的,因为我的路线是GET方法。 如果我更改为POST,我无法显示视图,因为它是GET方法。

任何帮助,欢迎。谢谢 !

回答

0

如果我正确阅读文档,则应该能够这样注册

/** 
    * @SLX\Route(
    *  @SLX\Request(method="GET", uri="add"), 
    *  @SLX\Request(method="POST", uri="add"), 
    *  @SLX\Bind(routeName="departement.add") 
    *) 
    */ 
    public function add(Application $app, Request $request) 
    { 

的@request注解相关联的多个请求方法URI模式到控制器的方法。如果给出多个@Request注释,则所有修饰符都将应用于所有@Requests,除非它们包含在@Route注释中。

+0

它的工作原理!谢谢 ! –