【问题标题】:Adding Parameter From Controller to Validation Request将参数从控制器添加到验证请求
【发布时间】:2022-01-31 18:04:34
【问题描述】:

我想将我的控制器分成几个服务层、验证层和逻辑层。 但是当我想向验证请求发送新变量时,我卡住了,我的方案是,如果有新变量发送,则表示新数据,如果新变量不存在,则表示它正在更新数据。

这是我的控制器:

    public function store(AlbumRequest $request, AlbumService $service)
    {
        $request->add(['new' => true])
        try{
            $service->store($request);
            return redirect(route('admin.web.album.index'));
        }catch(\Exception $err){
            return back()->withInput()->with('error',$err->getMessage());
        }    
    }

这是我的请求

class AlbumRequest extends FormRequest
{
    public function rules()
    {
        dd($this->request->get('new')
    }
}

我想捕获从控制器发送到请求的变量。怎么做? 谢谢。

【问题讨论】:

  • 如果你想知道是新的还是更新的请求,你可以关注这个,stackoverflow.com/a/61543980/7737270
  • 这给了我很多信息,谢谢分享。
  • 你想怎么捕捉什么变量?这是什么意思?

标签: php laravel


【解决方案1】:

您可以像这样在控制器的请求中添加新参数

$request->merge(array('new' => true));

【讨论】:

  • 不,我仍然无法通过合并方法将该变量发送到请求。还有其他解决方案吗?
  • $request->request->add(['new' => 1]);请试试这个
  • 仍未发送到 AlbumRequest。
【解决方案2】:

在您的请求到达您的控制器之前,它必须通过 AlbumRequest 类。所以你必须使用 prepareForValidation 方法在 AlbumRequest 类中合并该字段:

protected function prepareForValidation()
{
    $this->merge([
        'new' => true,
    ]);
}

在你的 AlbumRequest 类中添加这个方法,看看它是否有效

【讨论】:

  • 那么没有办法从Controller发送变量?
  • 仅当您在控制器中使用 Validation 门面而不是使用 AlbumRequest 类自己进行验证时。通过使用 $request->merge(['new'=>true]);在控制器中你会明白你的意思
【解决方案3】:

恐怕你不能这样做,因为传入的表单请求在调用控制器方法之前已经过验证。现在,如果您想知道请求是创建新内容还是更新内容,可以通过访问路由参数和方法类型来完成

public function rules()
{
    $rules = [
        'something' => 'required',
    ];

    if (in_array($this->method(), ['PUT', 'PATCH'])) {
        //it is an edit request
        //you can also access router parameter here, $this->route()->parameter('other thing');

        $rules['somethingelse'] = [
            'required',
        ];
    }

    return $rules;
}

【讨论】:

    【解决方案4】:

    您可以输入请求的类作为 URL 参数。

        class AlbumRequest extends FormRequest
    {
        public function rules()
        {
            dd(request()->get('new')
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-23
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 2019-02-25
      • 2015-09-15
      相关资源
      最近更新 更多