What's Changed

A few life quality improvements by @roxblnfk in #405

  • Make exception messages shorter and more elegant: hide internal stack trace and deduplicate the error reason

  • Throw an exception with clear message if Client is used without gRPC extension; add ext-grpcinto suggested packages How to develop with Updates

An Update is an operation that can mutate the state of a Workflow Execution and return a response.

How to define Updates

An Update handler has a name, arguments, response, and an optional validator.

  • The name, also called an Update type, is a string.

  • The arguments and response must be serializable.

The #[UpdateMethod]attribute indicates that the method is used to handle and respond to update requests.

#[UpdateMethod] public function myUpdate(string $signalName);

How to handle Updates in a Workflow

Workflows listen for Update by the update's name.

The handler method can accept multiple serializable input parameters, but it's recommended using only a single parameter. The function can return a serializable value or void.

#[WorkflowInterface] interface FileProcessingWorkflow {


public function processFile(Arguments $args); #[UpdateMethod] public function pauseProcessing(): void; }

Update handlers, unlike Query handlers, can change Workflow state.The Updates type defaults to the name of the method. To overwrite this default naming and assign a custom Update type, use the #[UpdateMethod]attribute with the nameparameter.

#[WorkflowInterface] interface FileProcessingWorkflow { #[WorkflowMethod] public function processFile(Arguments $args); #[UpdateMethod(name: "pause")] public function pauseProcessing(); }

How to validate an Update in a Workflow

Validate certain aspects of the data sent to the Workflow using an Update Validator method. For instance, a counter Workflow might never want to accept a non-positive number. Use the #[UpdateValidatorMethod]attribute and set nameto the name of your Update handler. Your Update Validator should accept the same input parameters as your Update Handler and return void.

#[WorkflowInterface] interface GreetingWorkflow { #[WorkflowMethod] public function getGreetings(): array; #[UpdateMethod] public function addGreeting(string $name): int; #[UpdateValidatorMethod(forUpdate: "addGreeting")] public function addGreetingValidator(string $name): void; }

How to send an Update from a Client

To send an Update to a Workflow Execution from a Client, call the Update method, annotated with #[UpdateMethod]in the Workflow interface, from the Client code.In the following Client code example, start the Workflow getGreetingsand call the Update method addGreetingthat is handled in the Workflow./** @var \Temporal\Client\WorkflowClientInterface $client */ // Create a typed Workflow stub for GreetingsWorkflow $workflow = $client->newWorkflowStub(GreetingWorkflow::class, $workflowOptions); // Start the Workflow $run = $client->start($workflow); // Send an update to the Workflow. addGreeting returns // the number of greetings our workflow has received. $workflow->addGreeting("World");Assets 2

What's Changed

  • Remove experimental flag from StartDelay by @tlalfano in #409

  • Fix JSON interval unmarshalling via DurationJsonType::parse() fix by @Zylius in #412

  • Add GH action to generate API documentation by @msmakouz in #407