用Symfony和树枝重定向

gisem1990

在我的Symfony项目中,我有两种看法。特定实体的详细信息视图和一个按钮,可将我带到带有日期参数其他数据的新视图。

我的代码存在问题,是从第二种方法返回第一种方法生成“返回上一页”页面按钮。

码:

/**
 * @Route("/details/{id}", name="first_method")
 */
public function firstMethod(Detail $id)
{
    $workspace = $this->entityManager
        ->getRepository(Detail::class)
        ->find($id);

    $build['detail'] = $detail;

$form = $this->createFormBuilder()
        ->add('date', DateTimeType::class, [
            'data' => new \DateTime(),
            'widget' => 'single_text'
        ])
        ->add(
            'save',
            SubmitType::class,
            [
                'attr' => ['class' => 'btn-submit']
            ]
        )
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $data = $form->getData();
        $date = $data['date']

        return $this->redirectToRoute('second_method', [
            'date' => $date
        ]);
    }

    return $this->render('first-method.html.twig', [
          'detail' => $detail,
        ]);
}

还有第二种方法:

 /**
 * @Route("/second-method/{date}", name="second_method")
 */
public function secondMethod($date)
{
    return $this->render('second-method.html.twig', [
        'someData' => $someData,
        'date' => $date,
    ]);
}

我在second_method树枝视图上有一个按钮,需要将我返回到method_one页面。

如何完成此操作,因为第二种方法可能需要参数$ id,但是找不到提供它的方法。也许还有其他方法?有人可以帮忙吗?

我认为以这种第一种方式应该使我喜欢:

{{ path('first_method', {'detailId':detail.id}) }}
糖尿病肾病

如@msg所示,您应该在第二页上提供第二个参数。然后,您将需要@Entity用于Detail转换的@ParamConverter注释用于日期转换注释:

/**
 * @Route("/second_method/{id_detail}/{date}", name="second_method")
 * @Entity("detail", expr="repository.find(id_detail)")
 * @ParamConverter("date", options={"format": "!Y-m-d"})
 */
public function (Detail $detail, \DateTime $date)
// ...

参数转换将执行第一次完整性检查,404如果实体不存在,则返回a 您还可以检入$detaildateURL中的一致的控制器切记:切勿信任用户输入(包括URL)。

当您重定向到第二个控制器时,您可以提供此新参数:

return $this->redirectToRoute("second_method", [
    "date" => $date,
    "id_detail" => $workspace->getId() // You can also pass the whole object and fetch the ID in the template
]);

然后在您的模板中:

{{ path('first_method', {'id': id_detail}) }}

细节

对于ParamConverters您可以在这里找到更多的细节:https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html

我个人更喜欢使用的@Entity注释进行转换,Entity因为您确定转换是如何完成的:我发现当项目增长且实体具有越来越多的参数时,它会更好。即使这@ParamConverter将在您的情况下工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章