私は現在Symfonyフォームを学習しています。そして、私が問題を抱えているコードは、私が望むように動作していません。私がしようとしているのは、ユーザーがデフォルトコントローラーにデータをサブミットすることです。データが有効で、別のメソッドにリダイレクトされているので、そのデータをデータベースに送信するようなことができます。symfony 3はリダイレクトを介してオブジェクトを渡します
私が問題を抱えているのは、簡単な名前と日付フィールドを持つタスクオブジェクトであるデータを別の名前付きルートに渡すことです。
私が書いたコードのいくつかは、クラスのような構造の単なるフォームです。
TaskType.php
namespace AppBundle\Entity\Forms;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use AppBundle\Entity\Forms\Task;
use Symfony\Component\OptionsResolver\OptionsResolver;
class TaskType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('task', TextType::class)
->add('dueDate', DateType::class, array('label' => 'Register'))
->add('save', SubmitType::class)
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Task::class,
));
}
DefaultController.php
...だから
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use AppBundle\Entity\Forms\TaskType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
...
/**
* @Route("/", name="homepage")
*/
public function indexAction(Request $request)
{
$form = $this->createForm(TaskType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// $form->getData() holds the submitted values
// but, the original `$task` variable has also been updated
$task = $form->getData();
// ... perform some action, such as saving the task to the database
// for example, if Task is a Doctrine entity, save it!
// $em = $this->getDoctrine()->getManager();
// $em->persist($task);
// $em->flush();
return $this->redirectToRoute('success', array($task));
}
return $this->render('forms/task.html.twig', array(
'form' => $form->createView(),
));
}
/**
* @Route("/success", name="success")
*/
public function successAction(Request $request) {
dump($request);die;
}
、あなたが見ることができるように、私はちょうど配列としてタスクに渡しています。このコードでは、彼が要求してタスクにアクセスできるかもしれないと思ったが、それはうまくいかないようだ。そして、successActionにTask [] $タスクパラメータを追加しようとすると、そのタスクは見つかりませんでした。
ここで2番目のアクションでオブジェクトにアクセスする方法はありますか?または私はちょうどちょっとここの後方にいるのですか?リダイレクトを行う前に、データの挿入やその他のデータ操作を行う必要がありますか?または、そこにデータを処理できるように、タスクオブジェクトをコントローラの別のメソッドに渡す方法がありますか?
ありがとうご入力
タスクオブジェクトにこのIDを変換するParamConverterを使用することができた後、あなたの成功のアクションは、タスク・パラメータ(IDまたは何でも)を使用する必要があります。 http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html – COil