当前位置: 首页 > 知识库问答 >
问题:

如何通过正确的对象使用reDirectToRoad?

祁嘉木
2023-03-14

这是我的简单代码

class LuckyController extends Controller
{
    public function taskFormAction(Request $request)
    {
        $task = new Task();
        //$task->setTask('Test task');
        //$task->setDueDate(new \DateTime('tomorrow noon'));

        $form = $this->createFormBuilder($task)
            ->add('task', TextType::class)
            ->add('dueDate', DateType::class)
            ->add('save', SubmitType::class, array('label' => 'Save'))
            ->getForm();

        $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid())
        {
            $task = $form->getData();

            return $this->redirectToRoute('task_ok', array('task' => '123'));
        }

        return $this->render('pre.html.twig', array('pre' => print_r($task, true), 'form' => $form->createView()));
    }

    public function taskOKAction(Task $task)
    {
        return $this->render('ok.html.twig', array('msg' => 'ok', 'task' => print_r($task, true)));
    }
}

这条线呢

return $this->redirectToRoute('task_ok', array('task' => '123'));

重定向到taskOKAction,但它只允许我通过URL发送参数(?task=123)。

我需要将object$task发送到taskOKAction,以便在屏幕上打印用户在表单中键入的内容。

我该怎么做?在询问好的解决方案是存储表单中的数据(例如,在数据库或文件中)并只在URL中传递对象ID的参数之前,我已经对stackoverflow发了火。我认为这是一个很好的解决方案,但它增加了我检查用户是否在URL中更改ID以显示其他对象的责任。

最好的方法是什么?

向你问好,L。

共有2个答案

赖浩荡
2023-03-14

从表单操作中,您可以在不使用实际302重定向的情况下执行此操作:

public function taskFormAction(Request $request)
{
    $task = new Task();
    //$task->setTask('Test task');
    //$task->setDueDate(new \DateTime('tomorrow noon'));

    $form = $this->createFormBuilder($task)
        ->add('task', TextType::class)
        ->add('dueDate', DateType::class)
        ->add('save', SubmitType::class, array('label' => 'Save'))
        ->getForm();
    $form->handleRequest($request);

    if($form->isSubmitted() && $form->isValid())
    {
        $task = $form->getData();
        return $this-taskOKAction($task)
    }
}

这是完全合法的,你的前端同事会感谢你没有重定向。

江仲渊
2023-03-14

使用参数转换器并正确注释管线。

类似于(如果对管线使用注释)

/**
 * @Route("/task/ok/{id}")
 * @ParamConverter("task", class="VendorBundle:Task")
 */
public function taskOKAction(Task $task)

如果参数只有一个且类型提示(如您的情况),您也可以省略@ParamConverter部分

 类似资料:
  • 问题内容: 我做了一个简单的测试用例: 并且我希望测试能够通过,但是我遇到了异常: 我以为assertRaises将通过,因为将引发TypeError异常? 问题答案: 如果您使用的是python2.7或更高版本,则可以将assertRaises用作上下文管理器并执行以下操作: 如果您正在使用python2.6,那么到目前为止,还有另一种方法是使用unittest2,这是unittest新功能到p

  • 问题内容: 以上失败,并出现AttributeError异常。我了解Python在调用时不保证 “全局变量”(在这种情况下是否存在成员数据)的存在。如果是这种情况,并且这是导致异常的原因,那么如何确保对象正确销毁? 问题答案: 我建议使用Python的语句来管理需要清理的资源。使用显式语句的问题在于,你必须担心人们会忘记完全调用它,或者忘记将其放在块中以防止发生异常时发生资源泄漏。 要使用该语句,

  • 问题内容: 我有一个物体。我想将其复制为对象,这样更改就不会修改。我意识到,复制从内置JavaScript对象派生的对象将导致额外的不需要的属性。这不是问题,因为我正在复制自己的文字构造对象之一。 如何正确克隆JavaScript对象? 问题答案: 在JavaScript中对任何对象执行此操作都不是简单或直接的。您将遇到错误地从对象的原型中获取应该留在原型中而不应复制到新实例的属性的问题。例如,如

  • 我在打字方面有点吃力。假设有一个literal对象,它的值是用spread运算符赋值的: 更新类型库后,将引发以下TS错误: 尝试在此答案中设置literal对象上的接口,但未解决此问题,因为一定是语法有问题: 将属性保存为的正确方法是什么?

  • 问题内容: 我正在尝试序列化对象并通过HTTP发送它。我正在使用一些教程,因为大多数教程都是关于套接字的,但是我不能为此使用套接字,也不能将文件存储在本地。 这是测试类Employee: 客户端: 我认为那是正确的。但是我被困在服务器端,我在服务器端也有employee类: 如何将此对象变回员工类对象? 任何帮助表示赞赏! 问题答案: 只是打字。

  • 问题内容: 这是我的代码: 为什么会这样呢? 第一个和第三个对象具有相同的内容和相同的哈希值,但它们讲述了3个唯一的对象? 问题答案: 您还需要以兼容的方式进行定义–否则,相等性将基于对象身份。 在Python 2上,建议您还定义与保持一致。在Python 3上,默认实现将为您委托。