【问题标题】:Silex: Return a new request to another route?Silex:将新请求返回到另一条路线?
【发布时间】:2012-04-07 06:07:49
【问题描述】:

我正在尝试使用 Silex 构建一个 Web 应用程序。对于我的一些路线,我希望结果是对另一条路线的新请求。

$app->get('/', function () use ($app) {
   //Do something
   //Request route /route2
});

$app->post('/route2', function () use ($app) {
   //Do something else
   return result
});

在我看来,这应该是一个非常标准的用例,但我找不到任何简单的方法来做到这一点。我知道redirect,但我不只是想重定向,因为我不想使用在第一个函数中创建的一组新的 post 参数。

我对 Silex/Symfony 和 HTTP 都很陌生,所以我想知道我是否遗漏了一些重要的东西?

编辑:我可能会补充一点,我一直在考虑修改当前的 Request 对象并用我自己的参数替换帖子数据,然后进行重定向,但 Request 类中似乎没有任何支持那个。

【问题讨论】:

  • 我认为这不是标准用例。您想生成一个带有自定义帖子字段的请求以跳转到其他路线没有重定向...我不明白:-/
  • 我会试着解释得更好一点,这就是我想做的事情:1. POST /route1 2. Perform some functions based on post fields 3. POST /route2 with post fields generated in step 2. Route1 例如可以运行一个函数来从列表中删除一个对象,当这完成后我想要调用 Route2,它将显示更新的列表。我不想直接在 Route1 中显示更新后的函数,因为我希望有可能从第三条路由调用 Route2,例如可以用来添加一个对象。
  • 对我来说,这基本上是重定向的目标 :) 如果没有重定向,如果用户刷新已删除对象的页面会发生什么?它将调用/route1 以删除已删除的对象,然后抛出错误。如果用户添加一个对象,它也会被添加两次。
  • 是的,这当然是个问题,但是重定向的问题是/route2 永远不会现在发生在/route1 上,无论操作是否成功,因为/route2will只获取原始的 POST 数据,对吧?
  • 那么您必须处理/route1 上的错误,因为/route1 将删除该对象。如果无法删除对象,则错误将来自/route1,然后不会重定向到/route2。您仍然可以将其他参数从/route1 提供给/route2。就像“一切都很好”、“我们有一个警告”等等......

标签: http symfony1 request silex


【解决方案1】:

你可以像这样使用Request Forwarding

$app->get('/', function () use ($app) {
//
$subRequest = Request::create('/route2', 'GET');
return $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
});

或者创建 Request 对象,而不是 $subRequest

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多