Error in PHP 7.4: header() expects at least 1 parameter, 0 given (is_callable(Header) is true)
1. Report an error in PHP 7.4: header() expects at least 1 parameter, 0 given. as shown in Figure 1
{
"errors": [
{
"debugMessage": "header() expects at least 1 parameter, 0 given",
"message": "Internal server error",
"extensions": {
"category": "internal"
},
"locations": [
{
"line": 5,
"column": 7
}
],
"path": [
"onlineStoreSession",
"versionedOnlineStore",
"theme"
],
"trace": [
{
"file": "E:\\wwwroot\\object\\Modules\\OnlineStoreThemeGraphQl\\Resolver\\OnlineStoreThemeResolver.php",
"line": 96,
"function": "header()"
},
{
"call": "Modules\\OnlineStoreThemeGraphQl\\Resolver\\OnlineStoreThemeResolver::Modules\\OnlineStoreThemeGraphQl\\Resolver\\{closure}(array(4), 'name')"
}
]
}
],
"data": {
"onlineStoreSession": {
"versionedOnlineStore": {
"theme": null
}
}
}
}
2. Check the specific code implementation
$fields = array_keys($resolveInfo->getFieldSelection());
return array_reduce($fields, function($carry, $field) use($fieldResolvers){
if (isset($fieldResolvers[$field])) {
$carry[$field] = is_callable($fieldResolvers[$field])? $fieldResolvers[$field](): $fieldResolvers[$field];
}
return $carry;
}, []);
3. Print the $fields , the result is as follows
$fields = array_keys($resolveInfo->getFieldSelection());
print_r($fields);
exit;
Array
(
[0] => id
[1] => editable
[2] => createdAt
[3] => editedAt
[4] => name
[5] => role
[6] => previewable
[7] => url
[8] => themeStoreThemeId
[9] => metadata
[10] => presets
[11] => themeSettingsCategories
)
4. Add judgment, when $field is equal to name, print $FieldResolvers[$field], is_callable($fieldResolvers[$field])
$fields = array_keys($resolveInfo->getFieldSelection());
return array_reduce($fields, function($carry, $field) use($fieldResolvers){
if (isset($fieldResolvers[$field])) {
if ($field == 'name') {
var_dump($fieldResolvers[$field]);
var_dump(is_callable($fieldResolvers[$field]));
exit;
}
$carry[$field] = is_callable($fieldResolvers[$field])? $fieldResolvers[$field](): $fieldResolvers[$field];
}
return $carry;
}, []);
string(6) "Header"
bool(true)
5. is_callable — Verify that the value can be called as a function within the current range. is_callable(Header) is true, because header() – sends native HTTP headers, the parameters are required, and then an error is reported. instanceof is used to determine whether a php variable belongs to a class instance. Closure is a class that represents anonymous functions. Adjust to $fieldResolvers[$field]After instanceof \closure, no more errors are reported.
$fields = array_keys($resolveInfo->getFieldSelection());
return array_reduce($fields, function($carry, $field) use($fieldResolvers){
if (isset($fieldResolvers[$field])) {
$carry[$field] = ($fieldResolvers[$field] instanceof \Closure) ? $fieldResolvers[$field](): $fieldResolvers[$field];
}
return $carry;
}, []);
