【问题标题】:How to change value of a request parameter in laravel如何在laravel中更改请求参数的值
【发布时间】:2016-08-17 04:27:15
【问题描述】:

我需要像这样更改请求参数的值:

$request->name = "My Value!";

我使用此代码但不起作用:

$request->offsetSet('img', $img);

【问题讨论】:

标签: laravel


【解决方案1】:

尝试:

$requestData = $request->all();
$requestData['img'] = $img;

另一种方法:

$request->merge(['img' => $img]);

感谢@JoelHinz。

如果要添加或覆盖嵌套数据:

$data['some']['thing'] = 'value';
$request->merge($data);

如果你不注入Request $request对象,你可以使用全局的request()助手或者\Request::门面代替$request

【讨论】:

  • 错误:调用未定义的方法 Illuminate\Http\Request::put()
  • put() 是一个集合方法,$request->all() 返回一个数组。
  • 请求对象实际上有replace()和merge()方法。我通常更喜欢使用这些。请参阅我对问题的评论以获得关于此的答案。
  • @JoelHinz,我认为它们在 Laravel 5 中不起作用,因为我看到很少有人在使用这些方法时遇到问题。但是我查看了 L5 的Request 源代码,我可以看到这些方法。谢谢。
  • 没有汗水。不过,您的答案仍然是错误的。 replace() 方法替换整个输入 - 如果您只想替换一个值,则需要 merge()。
【解决方案2】:

使用merge():

$request->merge([
    'user_id' => $modified_user_id_here,
]);

简单!无需将整个$request->all() 转移到另一个变量中。

【讨论】:

    【解决方案3】:

    如果需要自定义请求

    $data = $request->all();
    

    你可以传递字段的名称和值

    $data['product_ref_code'] = 1650;
    

    最后通过新的请求

    $last = Product::create($data);
    

    【讨论】:

      【解决方案4】:

      使用加法

      $request->request->add(['img' => $img]);
      

      【讨论】:

      • 这正是我要找的,谢谢!
      • 这在中间件中使用 $request 对象时非常有用。例如,我将 jwt 用于我的 api 端点,并且我的请求仅包含 jwt 字符串。当用户通过身份验证时,我将 userId 添加到中间件中的 $request 对象中。
      【解决方案5】:

      如果你需要更新请求中的某个属性,我建议你使用 Laravel 使用的 Request 类中的 replace 方法

      $request->replace(['property to update' => $newValue]);
      

      【讨论】:

      • 小心,替换方法删除原始请求数据,并将其全部替换为您的数组。 \Symfony\Component\HttpFoundation\ParameterBag 第 54 行 public function replace(array $parameters = []) { $this->parameters = $parameters; }
      • 我会避免使用 replace(),它会导致你的 API 出现一些非常烦人的错误。
      • 在请求数组中更新怎么样?
      【解决方案6】:

      如果您使用自定义请求进行验证、替换数据进行验证或设置默认数据(用于复选框或其他),请使用覆盖方法prepareForValidation()

      namespace App\Http\Requests\Admin\Category;
          
      class CategoryRequest extends AbstractRequest
      {
          protected function prepareForValidation()
          {
              if ( ! $this->get('url')) {
                  $this->merge([
                      'url' => $this->get('name'),
                  ]);
              }
              $this->merge([
                  'url'    => \Str::slug($this->get('url')),
                  'active' => (int)$this->get('active'),
              ]);
          }
      }
      

      我希望这些信息对某人有用。

      【讨论】:

        【解决方案7】:

        对我有用

        $request = new Request();
        $request->headers->set('content-type', 'application/json');     
        $request->initialize(['yourParam' => 2]);
        

        检查输出

        $queryParams = $request->query();
        dd($queryParams['yourParam']); // 2
        

        【讨论】:

          【解决方案8】:

          这里的答案很好,但我需要替换 JSON 请求中的值。在深入研究代码之后,我想出了以下代码。如果我在做一些愚蠢的事情,请告诉我。

          $json = $request->json()->all();
          $json['field'] = 'new value';
          $request->json()->replace($json);
          

          【讨论】:

            【解决方案9】:

            试试看:

            $request["name"] = "My New Value";
            $request["img"]  = $img;
            

            它在 Laravel 8 中工作。

            【讨论】:

              【解决方案10】:

              另外,请确保更新模型类。

              Item 
              {
                  fillable=[
                      'img',
                      ... // other attributes
                  ];
              }
              

              【讨论】:

                猜你喜欢
                • 2021-09-22
                • 1970-01-01
                • 2015-10-08
                • 2019-10-29
                • 2020-03-11
                • 2023-03-19
                • 2017-05-20
                • 1970-01-01
                • 2015-04-20
                相关资源
                最近更新 更多