想象一下 - Laravel应用程序,可以获得请求。
情况是,自定义请求具有整数名称的输入。在自定义请求文件中,我添加了另一个字段,让我们说"字段"。所以首先$request->all()
返回
array(
1 => "value1",
5 => "value5",
12 => "value12",
)
并在添加新字段$request->all()
后返回
array(
1 => "value1",
5 => "value5",
12 => "value12",
"fields" => array(
"key" => "value",
),
)
现在出现问题 - $request->get("fields")
返回null。
$request->all()
返回字段。
$request->only(["fields"])
返回带字段的数组。
$request->exists("fields")
返回true。
为什么会这样?
修改
在自定义请求类中添加新字段:
public function getValidatorInstance()
{
$validator = parent::getValidatorInstance();
$validator->after(function() use ($validator, $event)
{
$this->merge(["fields" => ["key" => "value"]]);
}
return $validator;
}
答案 0 :(得分:1)
$request->all()
应该返回通过请求提交的所有数据。表现得如此。
$request->only(["fields"])
正在从请求中获取fields
密钥并将其转换为数组[]
。正常行为
$request->exists("fields")
只是检查请求数据中是否存在该密钥。正常行为
展望Illuminate\Http\Request
,我没有看到get()
方法。我只看到用于从请求中提取输入的方法是$request->input('fieldName')
。但是__get()
中的Illuminate\Http\Request
方法似乎有效。我会坚持使用input()
方法,因为它更明确。
答案 1 :(得分:0)
我认为您可能会遇到一个简单的范围问题,并且您的验证程序$this
关闭中无法使用after
:
$validator->after(function() use ($validator, $event, $this)
{
$this->merge(["fields" => ["key" => "value"]]);
}
如果您使用的是PHP 5.3或以下,则无法使用上述内容中的$this
:
$self = $this;
$validator->after(function() use ($validator, $event, $self)
{
$self->merge(["fields" => ["key" => "value"]]);
}