-
Notifications
You must be signed in to change notification settings - Fork 38
Description
Having issues with FunctionsFramework::cloudEvent() when running in Cloud Functions (but not locally) as documented at https://cloud.google.com/functions/docs/tutorials/pubsub#preparing_the_application.
I'm calling the following:
FunctionsFramework::cloudEvent('eventarc-event-name', 'myFunctionName');
function myFunctionName(\CloudEvents\V1\CloudEventInterface $event)
This runs locally, but when I run it on Cloud Run the it tells me I have to hint Google\CloudFunctions\CloudEvent, but if I do that it wants CloudEventInterface instead. Putting either results in the other being required.
PHP message: PHP Fatal error: Uncaught LogicException: Your function must have "Google\CloudFunctions\CloudEvent" as the typehint for the first argument in /workspace/vendor/google/cloud-functions-framework/src/CloudEventFunctionWrapper.php:65
I can't repeat this locally. FunctionsFramework calls the following, which locally always forces CloudEventInterface, and I can debug this right through to the Reflection check on line 71 of CloudEventFunctionWrapper
public static function cloudEvent(string $name, callable $fn)
{
Invoker::registerFunction($name, new CloudEventFunctionWrapper($fn, true));
}
If I do both (which seems probably unintended and wrong anyway), I get the following error:
PHP message: PHP Fatal error: Uncaught Error: Call to undefined method ReflectionUnionType::getName() in /workspace/vendor/google/cloud-functions-framework/src/CloudEventFunctionWrapper.php:75 Stack trace: #0 /workspace/vendor/google/cloud-functions-framework/src/FunctionValidationTrait.php(43): Google\CloudFunctions\CloudEventFunctionWrapper->validateFirstParameter(Object(ReflectionParameter)) #1 /workspace/vendor/google/cloud-functions-framework/src/CloudEventFunctionWrapper.php(58): Google\CloudFunctions\CloudEventFunctionWrapper->validateFunctionSignature(Object(ReflectionFunction)) #2 /workspace/vendor/google/cloud-functions-framework/src/FunctionsFramework.php(35): Google\CloudFunctions\CloudEventFunctionWrapper->__construct('dicomwebImport', true) #3 /workspace/index.php(11): Google\CloudFunctions\FunctionsFramework::cloudEvent('transport-reque...', 'dicomwebImport') #4 /workspace/vendor/google/cloud-functions-framework/router.php(37): require_once('/workspace/inde...')
I'm not even sure how to proceed here, as this is the officially documented approach, but doesn't appear in the readme for this project at all.