Controller Methods
set
Use set()
to make variables from the controller available in the view.
<?php
// controllers/venues_controller.php
class VenuesController extends MvcPublicController {
public function show() {
$object = $this->model->find_by_id($this->params['id'], array(
'includes' => array('Event')
));
$this->set('object', $object);
}
}
<?php
// views/venues/show.php
?>
<h2><?php echo $object->name; ?></h2>
set_object
In an action where an id
URL parameter is available (e.g. the conventional show
action, where the id
parameter is passed from the URL), calling $this->set_object()
will find the object that has the specified id from the controller's native model and make it available to the view as $object
(using the equivalent of $this->set('object', $object)
).
<?php
// controllers/venues_controller.php
class VenuesController extends MvcPublicController {
public function show() {
$this->set_object();
}
}
?>
<?php
// views/venues/show.php
?>
<h2><?php echo $object->name; ?></h2>
set_objects
In an action that will show a collection of objects (e.g. the conventional index
action), calling $this->set_objects()
will find a paginated collection of the objects from the controller's native model and make it available to the view as $objects
(using the equivalent of $this->set('objects', $objects)
).
set_objects()
will handle pagination behind the scenes. If a URL param named page
(or in an admin action a URL named page_num
) is set, set_objects()
will use that to properly paginate the collection. It also calls $this->set_pagination($collection);
, which will allow for pagination links to be displayed in the view.
<?php
// controllers/venues_controller.php
class VenuesController extends MvcPublicController {
public function index() {
$this->set_objects();
}
}
// views/venues/index.php
// This will print_r() all of the retrieve objects
print_r($objects);
?>
set_pagination
To allow for pagination links to easily be created in a view, call $this->set_pagination($collection);
using a collection that is returned from a paginate()
call on a model.
<?php
// controllers/venues_controller.php
class VenuesController extends PublicController {
public function search() {
$collection = $this->Venue->paginate($this->params);
$this->set('objects', $collection['objects']);
$this->set_pagination($collection);
}
}
// views/venues/search.php
echo $this->pagination();
?>
set_pagination()
processes the collection and sets $this->pagination
to an appropriate array that will be used in paginate_links()
within $this->pagination();
in the view.
load_helper
$this->load_helper()
in the controller.
<?php
// controllers/venues_controller.php
class VenuesController extends MvcPublicController {
public function show() {
$this->load_helper('VenueDisplay');
$this->set_object();
}
}
?>
<?php
// views/venues/show.php
?>
<h2><?php echo $object->name; ?></h2>
<?php echo $this->venue_display->formatted_address($object); ?>
<?php
// helpers/venue_display_helper.php
class VenueDisplayHelper extends MvcHelper {
public function formatted_address($object) {
$html = '';
$html .= '<div>'.$object->address1.'</div>';
$html .= '<div>'.$object->address2.'</div>';
$html .= '<div>'.$object->city.', '.$object->state.' '.$object->zip.'</div>';
return $html;
}
}
?>
load_model
Use load_model()
if you want to use a model other than the controller's native model. To load multiple models, use load_models().
<?php
// controllers/venues_controller.php
class VenuesController extends MvcPublicController {
public function show() {
$this->load_model('Speaker');
$speakers = $this->Speaker->find();
}
}
?>
load_models
Use load_models()
if you want to use models other than the controller's native model. To load a single model, use load_model().
<?php
// controllers/venues_controller.php
class VenuesController extends MvcPublicController {
public function show() {
$this->load_models('Speaker', 'Event');
$speakers = $this->Speaker->find();
$events = $this->Event->find();
}
}
?>
redirect
To redirect to another page while inside of a controller, use redirect()
.
<?php
$url = MvcRouter::admin_url(array('controller' => 'venues', 'action' => 'index'));
$this->redirect($url);
?>
flash
Use flash()
to set a message or warning that will be displayed to the user. The text will be displayed by display_flash()
, which is called in the default admin layout (views/admin/layouts/admin.php
), but can be called elsewhere if desired.
<?php
// controllers/admin/admin_venues_controller.php
class AdminVenuesController extends AdminMvcController {
public function edit() {
if (!empty($this->params['data']) && !empty($this->params['data']['Venue'])) {
$object = $this->params['data']['Venue'];
if ($this->Venue->save($this->params['data'])) {
$this->flash('notice', 'Successfully saved!');
$this->refresh();
} else {
$this->flash('error', $this->Venue->validation_error_html);
}
}
$this->set_object();
}
}
?>
<?php
// views/admin/layouts/admin.php
?>
<div class="wrap">
<?php $this->display_flash(); ?>
<?php $this->render_main_view(); ?>
</div>
create_or_save
The add
and edit
actions in WP MVC's default admin controllers use create_or_save()
to either create or update records using data submitted from a form. create_or_save()
checks $this->params['data']
to see if data related to the controller's model is present. If it is and an ID value is set, the record with that ID is updated; if it is and an ID is not set, a record is inserted with the submitted data.
<?php
class AdminVenuesController extends MvcAdminController {
public function add() {
$this->create_or_save();
}
public function edit() {
$this->verify_id_param();
$this->create_or_save();
$this->set_object();
}
}
?>