2015-10-07 127 views
0

我有一个表单和POST方法的问题。 我在控制器中创建一个表单是这样的:Symfony2 POST方法控制器

$form = $this->createFormBuilder() 
     ->setAction($this->generateUrl('ricerca_index')) 
     ->setMethod('POST') 
     ->add('search', 'text',array(
       'label'=>'Cerca', 
       'required'=>false)) 
     ->add('submit', 'submit', array('label' => 'Cerca')) 
     ->getForm();  

    $name = $request->getLocale(); 
    return $this->render('DtEcBundle:Default:index.html.twig',array(
      'form' => $form->createView() 

而且我配置“ricerca_index”在我的路由文件中这样说:

 ################################################################################ 
    #        ricerca          # 
    ################################################################################ 

ricerca_index: 
     host:  "{_locale}.{domain}" 
     locales: { it: "/ricerca.{_format}", fr: "/ricerca.{_format}", de: "/ricerca.{_format}" } 
     defaults: { _locale: "%locale%", domain: "%domain%", _format: "html",  _controller: DtEcBundle:Search:index } 
requirements: 
    _locale: "it|fr|de" 
    domain: "%domain%" 
    _format: "html|json" 
    method: "POST" 

ricerca_index_www.it: 
    path:  /ricerca.{_format} 
    host:  "www.{domain}" 
    defaults: { _locale: "%locale%", _format: "html", _controller: DtEcBundle:Search:index } 
requirements: 
    _locale: "%locale%" 
    domain: "%domain%" 
    _format: "html|json" 
    method: "POST" 

ricerca_index_nowww.it: 
    path:  /ricerca.{_format} 
    host:  "{domain}" 
    defaults: { _locale: "%locale%", _format: "html", _controller:   DtEcBundle:Search:index } 
requirements: 
    _locale: "%locale%" 
    domain: "%domain%" 
    _format: "html|json" 
    method: "POST" 

在我的目的地我页面的控制器以这种方式编写打印我的变量ricerca_index:

use Symfony\Component\HttpFoundation\Request; 
class SearchController extends Controller { 

public function indexAction(Request $request) { 

    $search = $request->get('search'); 

    return $this->render('DtEcBundle:Search:index.html.twig',array(
      "search" => $search, 

    )); 

} 

在树枝文件我想打印我的变量形式“文本框“我写这样的代码:

{% extends '::base.html.twig' %} 
{% block body %} 
<div class="container"> 
    {{ search }} 
</div> 

{% endblock %} 

我没有收到错误,但我与转储变量为空,哪里出了问题?我是Symfony的新手..我该如何在页面中打印我的变量?

+0

看起来你有不同程度的POST请求的搜索值。尝试调试请求并在其中查找搜索字段。 symfony表单有一个名称。所以当请求进入控制器时,你必须从表单名称的请求中检索数据。要弄清楚表单的名称(或排除这种情况),只需查看您的html。它看起来像什么?搜索字段的名称属性的值是什么? – Alex

+0

@Alex我不忍受,“尝试调试请求并在其中查找搜索字段”。 这是调试中的html代码: ** ** –

+0

这就是我的意思。您应该以不同的方式检索您的表单。要获取搜索值,请使用以下代码:$ request-> get('form')['search'];或$ form = $ request-> get('form'); $ search = $ form ['search']; – Alex

回答

0

只是做到这一点:

$searchForm = $request->get('form'); 
$search = $searchForm['search']; 

而不是$请求 - >获取( '搜索');

您的文章数据看起来像这样实际上是:

[ 
    'form' => [ 
     'search' => <search_val>, 
     <...> // other values if any 
    ] 
]