The Delete Crud Action
will delete a record by the id provided in the URL.
Note
Before applying any configuration to an action
it must be mapped first.
If the action has not been mapped an exception will be raised.
Test or modify if the Crud Action is enabled or not.
When a CrudAction is disabled, Crud will not handle any requests to the action, and CakePHP will raise the normal
\Cake\Error\MissingActionException
exception if you haven’t implemented the action in your controller.
Warning
If you have enabled Crud and you are still receiving a MissingActionException
, ensure the action is enabled and
that the controller has the \Crud\Controller\ControllerTrait
implemented.
To test if an action is enabled, call the enabled
method on the action.
$this->Crud->action()->enabled();
To disable an action, call the disable
method on the action.
$this->Crud->action()->disable();
To enable an action, call the enable
method on the action.
$this->Crud->action()->enable();
To disable or enable multiple actions at the same time, Crud Component
provides helper methods.
The enable
and disable
method can take a string or an array, for easy mass-updating.
$this->Crud->enable('index');
$this->Crud->enable(['index', 'add']);
$this->Crud->disable('index');
$this->Crud->disable(['index', 'add']);
Note
These methods simply calls the enable
and disable
method in each Crud Action
class, and do not provide any magic
other than mass updating.
Warning
While it’s possible to update the enabled
property directly on an action using the config
methods,
it’s not recommend, as important cleanup logic will not be applied if you use the setConfig()
method directly.
The 1st parameter to Table::find()
- the default value is all
.
To get the current configured findMethod
keys call the findMethod
method without any arguments.
$this->Crud->action()->findMethod();
To change the findMethod value pass a string argument to the method
$this->Crud->action()->findMethod('my_custom_finder');
Note
This setting is only relevant if you use the API listener.
Note
The API listener will always enforce success
and data
to be part of the _serialize
array.
This method is intended to allow you to add additional keys to your API responses with ease. An example of this is the API Query Log.
To get the current configured serialize
keys call the serialize
method without any arguments.
$this->Crud->action()->serialize();
To change the serialize keys, pass a string
or an array
as first argument.
If a string is passed, it will be cast to array
automatically.
$this->Crud->action()->serialize(['my', 'extra', 'keys']);
This is a list of events emitted from the Delete Crud Action
.
Please see the events documentation for a full list of generic properties and how to use the event system correctly.
Called after the Controller::beforeFilter()
and before the Crud action.
It’s emitted from CrudComponent::startup()
and thus is fired in the same cycle
as all Component::startup()
events.
Triggered when a CrudAction
is going to handle a CakePHP request.
It’s emitted from CrudComponent::beforeFilter
and thus is fired in the same cycle as all Controller::beforeFilter
events.
The event is emitted before calling the find method in the table.
The Crud Subject contains the following keys:
id The ID that was originally passed to the action and usually the primary key value of your table.
repository An instance of the Repository
(Table
) which the query will be executed against.
query A Query
object from the Repository
where $PrimaryKey => $IdFromRequest
is already added to the conditions.
This is the last place you can modify the query before it’s executed against the database.
Note
An example
Given the URL: /posts/view/10
the repository
object will be an instance of PostsTable
and the query
includes a WHERE
condition with Posts.id = 10
After the event has emitted, the database query is executed with LIMIT 1
.
If a record is found the Crud.afterFind
event is emitted.
Warning
If no record is found in the database, the recordNotFound
event is emitted instead of Crud.afterFind
.
public function delete($id)
{
$this->Crud->on('beforeFind', function(\Cake\Event\EventInterface $event) {
$event->getSubject()->query->where(['author' => $this->Authentication->getIdentity()->id]);
});
return $this->Crud->execute();
}
After the query has been executed, and a record has been found this event is emitted.
The Crud Subject contains two keys:
id
The ID that was originally passed to the action and is usually the primary key of your model.
entity
The record that was found in the database.
Note
If an entity is not found, the RecordNotFound
event is emitted instead.
public function delete($id)
{
$this->Crud->on('afterFind', function(\Cake\Event\EventInterface $event) {
$this->log("Found item: " . $event->getSubject()->entity->id . " in the database");
});
return $this->Crud->execute();
}
Note
This event will throw an exception.
The default configuration will thrown an Cake\Error\NotFoundException
which will yield a 404 response.
The event is triggered after a find
did not find any records in the database.
You can modify the exception class thrown using CrudComponent::message
method
This event is emitted before calling Table::delete
.
The Crud Subject contains the following keys:
id The ID of the entity, from the URL
item The Entity
from the find()
call.
To abort a delete()
simply stop the event by calling
$event->stopPropagation()
.
public function delete($id)
{
$this->Crud->on('beforeDelete', function(\Cake\Event\EventInterface $event) {
// Stop the delete event, the entity will not be deleted
if ($event->getSubject()->entity->author !== 'admin') {
$event->stopPropagation();
}
});
return $this->Crud->execute();
}
This event is emitted after Table::delete()
has been called.
The Crud Subject contains two keys:
success if true
the delete()
call succeeded, false
otherwise
id The ID that was originally passed to the action and is usually the primary key of your model.
item The record that was found in the database.
public function delete($id)
{
$this->Crud->on('afterDelete', function(\Cake\Event\EventInterface $event) {
if (!$event->getSubject()->success) {
$this->log("Delete failed for entity " . $event->getSubject()->id);
}
});
return $this->Crud->execute();
}
Simple and event driven wrapper for Controller::redirect()
.
The Crud Subject contains the following keys:
url The 1st argument to Controller::redirect()
.
status The 2nd argument to Controller::redirect()
.
exit The 3rd argument to Controller::redirect()
.
entity (Optional) The Entity
from the previously emitted event.
All keys can be modified as you see fit, at the end of the event cycle they will be passed
directly to Controller::redirect()
.
The redirect $url
can be changed on the fly either by posting a redirect_url
field from your
form or by providing a redirect_url
HTTP query key.
The default for most redirects are simply to return to the index()
action.