Defining actions in Nova
nova:action
Artisan command. By default, all actions are placed in the app/Nova/Actions
directory:
--destructive
option:
handle
method. The handle
method receives the values for any fields attached to the action, as well as a collection of selected models. The handle
method always receives a Collection
of models, even if the action is only being performed against a single model.
Within the handle
method, you may perform whatever tasks are necessary to complete the action. You are free to update database records, send emails, call other services, etc. The sky is the limit!
name
property on the action class:
Laravel\Nova\Actions\DestructiveAction
. This will change the color of the action’s confirm button to red:
delete
method must return true
in order for the action to run.Action::then
method should not be utilized if your action is queued. To achieve similar functionality when using queued actions, you should leverage Nova’s action batching callbacks.then
method when registering your action.
The then
methods accepts a closure which will be invoked when the action has finished executing against all of the selected resources. The closure will receive a flattened Laravel collection containing the values that were returned by the action.
For example, note that the following action’s handle
method returns the $models
it receives:
then
callback to access the returned models and interact with them after the action has finished executing:
fields
method:
handle
method, you may access your fields using dynamic accessors on the provided ActionFields
instance:
default
method to set the default value for an action field:
ActionResponse
class. To display a custom “success” message, you may invoke the ActionResponse::message
method from your handle
method:
ActionResponse::danger
method:
ActionResponse::redirect
method:
ActionResponse::visit
method:
ActionResponse::openInNewTab
method:
ActionResponse::download
method. The download
method accepts the desired name of the file as its first argument, and the URL of the file to be downloaded as its second argument:
GenerateApiToken
, which creates unique tokens for use with a REST API. Using a custom action response modal, you could show the user running the action a modal allowing them to copy the newly-generated API token to their clipboard.
Using the nova:asset
Artisan command, you may generate a custom asset and register the custom modal with Nova’s Vue instance:
modal
method within your action’s handle
method, which will instruct Nova to show the modal after running the action, passing the Vue component’s name and any additional data you specify to the component. The data will be made available to the custom modal’s Vue component as props:
ShouldQueue
interface:
--queued
option when executing the nova:action
Artisan command:
File
fields to a queued action. If you need to attach a File
field to an action, the action must be run synchronously.$connection
and $queue
properties within the action’s constructor:
Laravel\Nova\Contracts\BatchableAction
interface. In addition, the action should use the Illuminate\Bus\Batchable
trait.
When an action is batchable, you should define a withBatch
method that will be responsible for configuring the action’s batch callbacks. This allows you to define code that should run after an entire batch of actions finishes executing against multiple selected resources. In fact, you can even access the model IDs for all of the resources that were selected when the batched action was executed:
Laravel\Nova\Actions\Actionable
trait to the resource’s corresponding Eloquent model.
For example, we may attach the Laravel\Nova\Actions\Actionable
trait to the User
Eloquent model:
withoutActionEvents
property on your action class:
withoutActionEvents
method, you may disable the action log for an action when the action is attached to a resource. Disabling the action log is often particularly helpful when an action is often executed against thousands of resources at once, since it allows you to avoid thousands of slow, sequential action log database inserts:
markAsFinished
method to indicate that the action has completed processing a particular model:
markAsFailed
method:
confirmText
, confirmButtonText
, and cancelButtonText
methods when defining the action: