CRUD Hooks

You may need to add some custom functionality when your CRUDs are created/saved/deleted/etc.

You can use the following hooks by adding a configureHooks method to your CRUD controller. E.g.

protected function configureHooks()
{
    Eventy::addAction('crud.store.after', function ($request, $item) {
        do('somestuff');
    }, 10, 2);
}

Available Hooks

Config

// Allows for modification of a specific Crud
Eventy::filter('enso.' . $crud_name . '.config.js-config', $config)

Index (Controller)

// XHR routes, before query building begins.
Eventy::action('crud.index.before', $request, $config)

// For overriding ordering and searching parameters
Eventy::filter('crud.index.overrideArgs', $args)

// Before response is returned
Eventy::action('crud.index.beforeAjax', $request, $config, $items)

Create route (Controller)

// For overriding the crud form view
Eventy::filter('crud.create.view', $view_name, $config, $request)

// For Custom updates to the config prior to json data conversion
Eventy::action('crud.create', $config, $request)

Clone route (Controller)

// Altering how the clone process occurs
Eventy::action('crud.clone.replciate-item', $config, $request, $clone)

// Alter Cloning of relationships from the base item
Eventy::action('crud.clone.replciate-relations', $config, $request, $item, $clone)

Store route (Controller)

// Alter $config & request prior to validation checks
Eventy::action('crud.store.before-validation', $config, $request)

// Alter validation rules
Eventy::filter('crud.store.rules', $rules, $config, $request)

// Alter validation messages
Eventy::filter('crud.store.messages', $messages, $config, $request)

// Alter data to store
Eventy::filter('crud.store.data', $request_data, $config, $request)

// Final config updates prior to saving the updates to a new model
Eventy::action('crud.store.before', $config, $request)

// Alter config (and so item) after save is complete
Eventy::action('crud.store.after', $config, $request)

// Alter XHR response data
Eventy::filter('crud.store.xhr-success', $response_data, $config, $request)

Edit route (Controller)

// For overriding the crud form view
Eventy::filter('crud.edit.view', $view_name, $config, $request)

// For Custom updates to the config & item prior to json data conversion
Eventy::action('crud.edit', $config, $request)

Update route (Controller)

// Alter $config & request prior to validation checks
Eventy::action('crud.update.before-validation', $config, $request)

// Alter validation rules
Eventy::filter('crud.update.rules', $rules, $config, $request)

// Alter validation messages
Eventy::filter('crud.update.messages', $messages $config, $request)

// Alter data to store
Eventy::filter('crud.update.data', $request_data, $config, $request)

// Final config updates prior to updating the model
Eventy::action('crud.update.before', $config, $request)

// Alter config (and so item) after save is complete
Eventy::action('crud.update.after', $config, $request)

// Alter XHR response data
Eventy::filter('crud.update.xhr-success', $response_data, $config, $request)

Delete route (Controller)

// Alterations to make before deleting item
Eventy::action('crud.destroy.before', $config, $request, $item)

// Alterations to make after deleting item
Eventy::action('crud.destroy.after', $config, $request);

// Alter XHR response data
Eventy::filter('crud.delete.xhr-success', $response_data, $config, $request)

Re-order route (Controller)

// Actions to take before reorder attempted
Eventy::action('crud.reorder.before', $config, $request)

// Alter id of item to move
Eventy::filter('crud.reorder.id', $id, $config, $request)

// Alter change to make
Eventy::filter('crud.reorder.change', $change, $config, $request)

// Actions to take after reorder attempted
Eventy::action('crud.reorder.after', $updated, $config, $request)

Controller Methods

You can also override the beforeSaveCallback and afterSaveCallback methods on your Crud controller. These methods both take the same arguments.

public function beforeSaveCallback(Model $model, array $data, string $action): Model
{
    // Do stuff with your model here

    return $model;
}