2013-02-22 46 views
4

我正在學習symfony2,並且我在控制器中創建了一個窗體,如下圖所示。 控制器文件DefaultController.phpsymfony2表單不顯示

namespace Banner\TestBundle\Controller; 

use Banner\TestBundle\Entity\Contact; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Banner\TestBundle\Entity\Task; 
use Symfony\Components\HttpFoundation\Request; 

class DefaultController extends Controller 
{ 
public function newAction(Request $request) 
{ 

echo "The controller is called "; 
$task = new Task(); 
$task->setTask("Write a blog Post "); 
$task->setDueDate(new DateTime('tomorrow')); 

$form = $this->createFormBuilder($task) 
      ->add('task','text ') 
      ->add('duedate','date') 
      ->getForm(); 
    return $this->render('BannerTestBundle:default:zoo.html.twig',array('form'=>$form->createView())); 

} 
} 

我的路由文件是如下。 的routing.yml

task_new: 
pattern: /task/{request} 
defaults: { _controller: BannerTestBundle:Default:new} 

和zoo.html.twig文件是波紋管。

{% extends '::page.html.twig' %} 
    {% block title %}The Zoo{% endblock %} 

    {% block content %} 

     <form action="{{ path('task_new') }}" method="post" {{ form_enctype(form) }}> 
       {{ form_widget(form) }} 
      <input type="submit"> 
     </form> 

    {% endblock %} 

因爲我在我的網址中傳遞「任務/ GET」,它會顯示'請求不存在。錯誤500'。

我基本上想要做的是當我通過網址zoo.html.twig將被稱爲。我想在zoo.html.twig中顯示錶單。

回答

6

您無需將$request傳遞給您的操作,也無需將其放入路線中。請求對象在全局上下文中可用。所以

task_new: 
    pattern: /task-new 
    defaults: { _controller: BannerTestBundle:Default:new} 

您可以把它這樣

public function newAction(Request $request) 

或有

public function newAction() 

並獲得這樣

$request = $this->getRequest(); 
+0

+1兩個可能的請求檢索說明 – DonCallisto 2013-02-22 08:13:39

+0

謝謝解決方案是工作.. – 2013-02-22 08:37:23

1

請求對象,你的路由文件不正確縮進所以yaml將不會t正確解析。嘗試:

task_new: 
    pattern: /task/{request} 
    defaults: { _controller: BannerTestBundle:Default:new} 

另外:

  1. 這可能是一個壞主意,覆蓋請求方式
  2. 你不似乎與要求在控制器
  3. 做任何事情