2014-11-02 62 views
0

我試圖做一個簡單的表單。控制器和視圖之間的綁定已完成。但是當用戶提交時我無法收到表單數據。無法收到來自我的控制器的表單請求

public function addAction() 
{ 
    $router = $this->get('router'); 
    $request = $this->get('request'); 

    $ret = 'not set'; 
    $title = 'not set'; 

    if ($request->getMethod() == 'POST') { 

    $pictures = $request->files->get('pictures'); 
    $title = $request->request->get('title'); 

    $ret = $this->get('my_project_blog.post_service') 
       ->create($title, $subtitle, $description, $pictures); 

    } 

    return $this->render('MyProjectBlogBundle:Default:add.html.twig', array('err' => $ret, 'title' => $title)); 
} 

現在add.twig.html

<form enctype="multipart/form-data" action="{{ path('my_project_blog_add') }}" method="POST" id="contactform"> 

    <fieldset id="contact_form"> 
    <label for="title"> 
     <input type="text" name="title" id="name" placeholder="Enter A Title"> 
    </label> 
    <label for="file"> 
     <input name="pictures[]" type='file' multiple='multiple' ></input> 
    </label> 

    <input type="submit" class="submit btn btn-default btn-black" id="submit" value="Submit"> 
    </fieldset> 

</form> 

結果之前提交:

Pictures: not set. 
Title: not set 

後提交:

Pictures: Error pictures count == 0. 
Title: 
+0

通常形式[創建](http://symfony.com/doc/current/book/forms.html)在Symfony2的 – xurshid29 2014-11-02 15:57:25

回答

2

有什麼特別的原因,爲什麼你沒有使用Symfony表單組件?

不知道如何可能,但也許你錯了request服務從容器。您應該使用Request Stack服務或添加$request作爲您的操作參數。只是測試了下面的代碼,一切正常。

public function addAction(Request $request) 
{ 
    if ($request->getMethod() == 'POST') { 
     $title = $request->request->get('title'); 
     $files = $request->files->all(); 
    } 
} 

正如在評論中提及xurshid29,symfony的讓您有機會來定義的形式更容易處理的響應更加容易。

// In controller 
public function addAction(Request $request) 
{ 
    $form = $this->createFormBuilder() 
     ->add('title') 
     ->add('pictures', 'file', [ 
      'multiple' => true, // Since symfony 2.5 
     ]) 
     ->add('Submit', 'submit') 
     ->getForm(); 

    $form->handleRequest($request); 
    if ($form->isValid()) { 
     // Process data from $form->getData() 
    } 

    return $this->render('MyProjectBlogBundle:Default:add.html.twig', [ 
     'form' => $form->createView() 
    ]); 
} 

// In view 
{% block content %} 
    {{ form(form) }} 
{% endblock %} 
+0

由於不同的一點點!第二種方式運作良好。但第一個沒有。我不知道爲什麼。謝謝你的提示。 – Gura 2014-11-03 19:11:56

+0

您的第一個示例因crsf令牌不起作用。 createFormBuilder和sf2爲每個表單添加一個標記。它可以像這樣禁用$ this-> createFormBuilder($ object,array('csrf_protection'=> false)) – Gura 2014-12-22 12:19:43