Now that we have a basic application class prepared, we can start adding action methods and view scripts. We'll start with an index of published blog articles.
Change to the
directory and open the SYSTEM/source/acme/Acme/App/Blog.php page controller
class file. (In this example we use the vim
editor, but you can use anything you like.)
$cd$SYSTEM/source/acme/Acme/App/vim Blog.php
Add the following PHP code at the top of the class inside the
actionIndex() method.
<?php
public function actionIndex()
{
// public blog articles in descending order, all result pages
$fetch = array(
'where' => array('blogs.status = ?' => 'public'),
'order' => 'blogs.created DESC',
'page' => 'all',
);
// fetch all matching records
$this->list = $this->_model->blogs->fetchAll($fetch);
}
A bit of explanation:
-
The
$fetcharray is a series of clause definitions to say what records we want to retrieve. There are keys for each part of an SQL SELECT command:cols,where,join,group,having,order, andlimit. In addition, there are other keys related to model fetches, such aspageandpagingto indicate which page-number of results to retrieve and how many results per page. -
The
$this->listproperty is populated by a call to the blogs model. In this case, we fetch all records (a "collection") that match our$fetchparameters.
|
Note |
|---|---|
|
Public properties of the controller are automatically assigned to the view at render-time. You don't need to assign them yourself. |
By default, Solar page controllers expect to render a view script
named for the action being invoked. As such, we need to create a
view called index.php for the
actionIndex() method.
$ vim Blog/View/index.php
|
View Inheritance |
|---|---|
|
Page controller view scripts are inherited from their parent
controllers. Thus, an |
Enter the following code to replace whatever else might be there.
<?php
$title = $this->getTextRaw('TITLE_INDEX');
$this->head()->setTitle($title);
?>
<h2><?php echo $this->getText('HEADING_INDEX'); ?></h2>
<?php if (! $this->list): ?>
<p><?php echo $this->getText('ERR_NO_RECORDS'); ?></p>
<?php else: ?>
<ul>
<?php foreach ($this->list as $item): ?>
<li><?php
echo $this->escape($item->title);
echo " ";
echo $this->action(
"{$this->controller}/read/{$item->id}",
'ACTION_READ'
);
?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
Essentially, this view takes the collection of records in
$this->list and presents them as an unordered
list, with a link to read each one.
-
Public properties from the page controller become properties of the view object. For example,
$this->listrefers to the$listproperty from the page controller. -
The page controller creates a few view properties automatically for you. They are
$this->controller_class,$this->controller,$this->action,$this->layout, and$this->errors. -
All variables not prefixed with
$thisare local to the view script itself. That way, it's easy to tell what is from the controller, and what is created by the view. -
The methods
$this->getTextRaw(),$this->head(),$this-getText(),$this->escape(), and$this->action()are called "helpers". They encapsulate common bits of code that are used over and over within views. You can see all the available helpers in the Solar_View_Helper and Solar_View_Helper_Form packages. -
The use of all-capital text strings instead of literal text is to prepare for localization later.
You should now be able to browse to http://localhost/index.php/blog and see a listing of exactly one public blog article.