【问题标题】:Forward POST request to an other url with Silex?使用 Silex 将 POST 请求转发到另一个 url?
【发布时间】:2013-12-06 10:29:33
【问题描述】:

我有一个带有一些输入字段的搜索表单。该表格位于/search/,并通过 POST 传输。 如果表单被触发,我想将用户转发到/search/{one_parameter_from_form}。该参数应进行编码和清理以在 url 中使用。

我尝试了以下方法:

$app->post('/search', 
    function (Request $request) use($app)
    {
        return $app->redirect('/search/' . str_replace(' ', '-', $request->get('q')));
    });

但是在这里我必须自己“清理”请求参数,并且我无法访问重定向控制器中的所有其他请求参数。

1) 我如何访问所有的 POST 参数?

2) 我怎样才能得到一个干净的请求 URL?

【问题讨论】:

    标签: php silex


    【解决方案1】:

    我是 Symfony 用户,但您似乎可以创建子请求并像转发一样执行它。

    Cookbook entry

    片段:

    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpKernel\HttpKernelInterface;
    
    $subRequest = Request::create('/');
    $response = $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST, false);
    

    【讨论】:

    • 如果我将执行子请求,我无法将用户转发到 url /search/param。网址将仅为/search
    • 通常不允许按照 HTTP 标准重定向 POST 请求。有一个状态 307,但这不会有用。您可以使用子请求和 THEN 重定向,这将为您提供基本相同的结果。
    【解决方案2】:

    您可以使用$app->redirect('/', 303);。状态码 303 导致浏览器尝试 GET 而不是 POST。

    【讨论】:

      猜你喜欢
      • 2018-07-14
      • 2013-11-08
      • 2016-12-14
      • 1970-01-01
      • 2020-03-21
      • 2017-05-07
      • 2017-12-27
      • 2017-02-04
      • 2012-04-24
      相关资源
      最近更新 更多