First of all, whether or not a delegate can be moved is business/domain logic and does not belong in the controller. Move all the logic related to that into the repository/service class which returns false if something goes wrong, then use a getError method to get an error message.
Second, the construction of the 'messages' flash variable can be abstracted into a protected method achieve DRY.
Third, "update" to describe a controller action which is clearly just aimed at moving a delegate from one event to another is misleading, so I'd rename it to just "move".
public function move($id)
{
$delegate = $this->delegate->findById($id);
if (!$delegate) {
return $this->notFound();
// or something like this...
App::abort(404);
}
$input = Input::all();
if (!$this->delegate->move($delegate, $input)) {
$error = $this->delegate->getError();
$message = $this->wrapMessage('error', 'Oops!', $error)
return Redirect::back()->withInput()->with('message', $message);
}
$message = $this->wrapMessage('success', 'Excellent!', 'This floating delegate was successfully moved.');
return Redirect::to('admin/events')->with('message', $message);
}
protected function wrapMessage($type, $title, $content)
{
return (object) array(
'title' => $title,
'content' => $content,
'alert_type' => $type
);
}