【问题标题】:Laravel API JSON Request change property namesLaravel API JSON 请求更改属性名称
【发布时间】:2019-12-10 15:54:21
【问题描述】:

在 Laravel 中如何更改 JSON Request 的属性名或属性有什么解决方案吗?

类似于 Eloquent API Resources 但在响应中,它将在请求中完成,然后再定向到请求验证?

从这里,

{
    "agent_reference": "ABC-12345",
    "product_instance_id": "aca68c65-44c3-4ea1-a726-ca183de09a31",
    "add_ons": [
        "string"
    ],
    "transportation": "string",
    "guests": [
        {
        "guest_type_key": "string",
        "add_ons": [
            "string"
        ],
        "field_responses": [
            {
            "key": "string",
            "response": "string"
            }
        ]
        }
    ]
}

对此,

{
    "agent_id": "ABC-12345",
    "plan_id": "aca68c65-44c3-4ea1-a726-ca183de09a31",
    "additional_params": [
        "string"
    ],
    "pickup_place": "string",
    "visitors": [
        {
        "visitor_kty": "string",
        "additional_params": [
            "string"
        ],
        "responses": [
            {
            "id": "string",
            "result": "string"
            }
        ]
        }
    ]
}

【问题讨论】:

    标签: php json laravel laravel-5 eloquent


    【解决方案1】:

    Laravel 4 支持这样的事情,但遗憾的是,随着 Laravel 5 的发布,它被删除了。

    对于 Laravel 5.2+,实现这一点的“简洁”方法是在 App\Http\Requests\FormRequest 类中重写 validationData() 方法。

    看看:

    Illuminate\Foundation\Http\FormRequest

    protected function validationData()
    {
        return $this->all();
    }
    

    上面的函数是为了返回所有将被发送到验证的输入,$this 是请求本身。

    因此,在您的 App\Http\Requests\FormRequest 类中,您定义了完全相同的方法,获取输入,根据需要进行清理(甚至根据您的问题创建具有不同键名的全新结构),将其替换为请求持久化并返回,如下所示:

    /**
     * Get data to be validated from the request.
     *
     * @return array
     */
    protected function validationData()
    {
        $inputs = $this->all();
    
        // Sanitize $inputs as your likes.
    
        $this->replace($inputs); // To persist.
    
        return $this->all();
    }
    

    这就是您在 Laravel 5.2+ 中完成它的方式。

    希望对你有帮助。

    【讨论】:

    • 谢谢这位先生,但问题是我如何更改这些属性名称,尤其是嵌套数组属性,以便传入此 validationData 函数?
    • Laravel 没有开箱即用的方法来实现这一点,您必须使用纯 php 来解决它。
    • 非常感谢先生的回答。上帝保佑。
    猜你喜欢
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 2016-06-24
    • 2012-01-18
    • 1970-01-01
    • 2019-05-09
    • 2019-06-28
    • 2023-03-02
    相关资源
    最近更新 更多