4

私はsymfony2を学んでいて、コントローラーで次のような1つのフォームを作成しました。DefaultController.phpとしてのコントローラーファイル

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 %}

URLで「task/GET」を渡すと、「リクエストが存在しません」と表示されます。エラー500'。

基本的にやりたいのは、URLを渡すとzoo.html.twigが呼び出されることです。zoo.html.twigにフォームを表示したい。

4

2 に答える 2

6

あなたはあなたの行動にパス$requestする必要はありません、そしてあなたはそれをあなたのルートに置く必要はありません。リクエストオブジェクトはグローバルコンテキストで使用できます。それで

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

このままにしておくこともできます

public function newAction(Request $request)

または持っている

public function newAction()

このようなアクセスリクエストオブジェクト

$request  = $this->getRequest();
于 2013-02-22T07:56:47.000 に答える
1

ルーティングファイルが適切にインデントされていないため、yamlが適切に解析されません。試す:

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

また:

  1. そのようにリクエストをオーバーライドすることはおそらく悪い考えです
  2. コントローラのリクエストで何もしていないようです
于 2013-02-22T07:57:09.277 に答える