You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 10如何允许特定路由/参数的POST参数包含空格?

Laravel 10 允许嵌套POST参数保留空格的解决方案

针对你遇到的嵌套参数numbering.invoice.priceFormat.decimal无法保留空格的问题,以下是几个可行的解决方法:

方法一:修正中间件的排除配置

Laravel默认的TrimStrings和ConvertEmptyStringsToNull中间件会分别修剪字符串首尾空格、把空字符串转为null,这两个都可能导致你的空格参数失效,需要同时配置排除:

  1. 修改app/Http/Middleware/TrimStrings.php的$except数组,添加嵌套参数的点分隔键:
protected $except = [
    // 其他已排除的参数
    'numbering.invoice.priceFormat.decimal',
];
  1. 同步修改app/Http/Middleware/ConvertEmptyStringsToNull.php的$except数组:
protected $except = [
    // 其他已排除的参数
    'numbering.invoice.priceFormat.decimal',
];

方法二:自定义请求类手动保留空格

如果中间件配置不生效,可以在自定义请求类中,在验证前手动保留目标参数的原始值:

创建app/Http/Requests/NumberingUpdateRequest.php:

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class NumberingUpdateRequest extends FormRequest
{
    public function authorize()
    {
        return true; // 根据你的实际权限逻辑调整
    }

    public function rules()
    {
        return [
            'numbering.invoice.priceFormat.decimal' => 'required|string',
        ];
    }

    protected function prepareForValidation()
    {
        // 手动保留decimal参数的原始空格值
        if (isset($this->numbering['invoice']['priceFormat']['decimal'])) {
            $decimal = $this->numbering['invoice']['priceFormat']['decimal'];
            $this->merge([
                'numbering' => [
                    'invoice' => [
                        'priceFormat' => [
                            'decimal' => $decimal,
                        ],
                    ],
                ],
            ]);
        }
    }
}

在路由和控制器中使用这个请求类:

// 路由文件
Route::post('/numbering/update', [NumberingController::class, 'update']);

// 控制器方法
public function update(NumberingUpdateRequest $request)
{
    $decimalValue = $request->input('numbering.invoice.priceFormat.decimal');
    // 后续业务逻辑
}

方法三:针对特定路由禁用相关中间件

如果仅需在单个路由上允许空格,可以直接禁用该路由的TrimStrings和ConvertEmptyStringsToNull中间件:

Route::post('/your-target-route', [YourController::class, 'handle'])
    ->withoutMiddleware([
        \App\Http\Middleware\TrimStrings::class,
        \App\Http\Middleware\ConvertEmptyStringsToNull::class,
    ]);

注意:这个方法会禁用该路由所有参数的修剪和空字符串转null,适合单一特殊场景。

内容的提问来源于stack exchange,提问作者Engazan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:06:13