【问题标题】:How to prevent user from modifying submitted value in the form?如何防止用户修改表单中提交的值?
【发布时间】:2021-07-26 19:54:24
【问题描述】:

我有一个向控制器发送值的简单表单:

<form action="{{route('mollie.payment')}}" method="post"  >
@csrf
{{--    <input name="text" type="text">--}}


<button type="submit"  name="test" value="23.00">Send</button>
</form>

这个值是静态的,这个值不能被修改。当然,它可以在 Chrome 开发工具中轻松更改。

我怎样才能更好地实现这一点?

我想像这样进行验证:

   public function preparePayment(Request $request)
   {
    
    $this->validate($request,[
        'test' => '230.00'
    ]);
...

但它不起作用:

BadMethodCallException
Method Illuminate\Validation\Validator::validate230.00 does not exist.

保护这个价值的好方法是什么?

【问题讨论】:

  • 如果它是静态的并且不会被修改,为什么不在控制器的变量中定义它呢?
  • 是的,为什么它甚至是表单的一部分?
  • 如果它是某种令牌,如果它已被更改且无效,则拒绝所述值。如果这个值类似于价格或类似的东西,那么在你的控制器中计算它而不是从表单中获取它。正面价格仅供展示,不可计算。

标签: php laravel validation


【解决方案1】:

利用 laravel 表单请求验证请求负载。

您可以通过命令创建新的表单请求

php artisan make:request StorePaymentRequest

然后到 app\Http\Requests 文件夹中新建的文件,将所有规则都写在这里。

<?php

namespace App\Http\Requests\StorePaymentRequest;

use Illuminate\Foundation\Http\FormRequest;=

class GetPayoutRequest extends FormRequest
{

    public function rules()
    {
        return [
            'status' => 'numeric|between:23.00,23.00'
    }
}

preparePayment 控制器方法中使用此 StorePaymentRequest。

public function preparePayment(StorePaymentRequest $request)
{
    $requestPayload = $request->validated();
    dd($requestPayload);
}

现在,如果成功通过验证,请求将能够出现在此处,否则将自动抛出ValidationException

【讨论】:

    猜你喜欢
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2013-07-16
    • 2012-05-26
    • 1970-01-01
    相关资源
    最近更新 更多