【问题标题】:Can't override default value for optional parameter in POST request on Symfony 4无法覆盖 Symfony 4 上 POST 请求中可选参数的默认值
【发布时间】:2019-08-26 07:43:48
【问题描述】:

我从 Symfony 4.3 开始,我正在努力寻找如何在 POST 请求中使用可选参数。

在文档中说我应该使用defaults 来指定我的请求的可选参数。但是,Symfony 似乎一直在忽略我的 POST 参数并获取默认值。

class NewController extends AbstractController
{
    /**
     * @Route(
     *     "/app/new",
     *     name="app_new",
     *     methods={"POST"},
     *     defaults={"app_type":"teste", "name":"defaultVal", "phone":"", "url":""}
     *     )
     *
     * Creates new application authorization flow
     */
    public function indexAction($app_type, $name, $phone, $url)
    {
//        $appType = $this->getParameter('app_type');

        return new Response('Hello ' . $name . PHP_EOL);
    }
}

当任何通过 POST 发送的参数被忽略时:

$ curl -X POST http://127.0.0.1:8000/app/new -d "name=John&app_type=45533" 

返回

你好默认值

我在这里做错了吗?

【问题讨论】:

    标签: php symfony symfony4


    【解决方案1】:

    您似乎混淆了不同的参数类型。

    “路由”参数与“请求”参数不同。

    您使用@Route 注释定义的内容恰当地是路由参数。基本上,您可以将不同的路径段用作应用程序中的参数。

    通常是这样的:

    /blogpost/{id}
    

    id 可以在您的应用程序控制器中作为$id 注入。

    在您的情况下,您正在为您甚至没有在路由定义中定义的路径段定义默认值......所以除了默认值之外,没有办法获得任何值。

    你可以像这样重写你的控制器动作:

    /**
     * @Route(
     *     "/app/new",
     *     name="app_new",
     *     methods={"POST"})
     */
    public function indexAction(Symfony\Component\HttpFoundation\Request $request)
    {
        $appType = $request->get('app_type', 'yourDefaultValue');
        $name    = $request->get('name', 'anotherDefaultValue');
        $phone   = $request->get('phone');
        $url     = $request->get('url');
    
        return new Response('Hello ' . $name . PHP_EOL);
    }
    

    【讨论】:

    • 你是对的@yivi。 4.6 是我的 Symfony CLI 版本。我正在使用4.3。我会更新问题。我在文档之后尝试了很多东西,但从那时起就没有在任何地方看到你的方法。非常感谢您的解决方案和帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 2013-05-13
    • 2022-01-14
    相关资源
    最近更新 更多