Professional Documents
Culture Documents
View convention
View template files are named after the
Example
Heres
Flow
CakePHP
knows
that
a
request
to
http://example.com/people/ maps to a call on
the index() function of the PeopleController,
where the Person model is automatically
available (and automatically tied to the
people table in the database), and renders to
a file.
None of these relationships have been
configured by any means other than by
creating classes and files that youd need to
create anyway.
Naming conventions
http://book.cakephp.org/view/328/Cake-
Conventions
Table names: notes, my_notes
Model: mynote.php->MyNote
Controller: my_notes_controller.php->
MyNotesController
Views named after actions, organised in
folders according to the related controller:
views/my_notes/index.thtml
views/my_notes/add.thtml
foldername =students
view file extendsion must be .ctp or .thtml
Paths + parameters
Cake uses url to pass parameters
Apache mod_rewrite converts url into
OOP in PHP
Limited support in PHP <5
Much better support in PHP >=5
Simpler than Java OOP
class SomeClass {
function func() {
.
}
}
SomeClass s = new someClass();
s->func();
= 'Hello';
Controller:
<?php
/* app/controller/hello_controller.php */
class HelloController extends AppController {
var $name = "Hello";
var $uses = 'Hello';
function index() {
$data = 'Hello world!';
$this->set('data', $data);
}
}
?>
Model
Add table to DB:
Model
Add a script called contact.php to models/
<?php
class Contact extends AppModel
{
var $name = Contact';
}
?>
View
views/contacts/index.thtml
<h1>Contact list</h1>
<p>
<?php echo $html->link('Add Contact',
'contacts/add') ?>
</p>
<table>
<tr>
<th>Id</th>
<th>Name</th>
<th>Number</th>
</tr>
View
views/contacts/index.thtml cntd
<?php foreach ($contacts as $contact): ?>
<tr>
<td><?php echo $contact['Contact']['id']; ?></td>
<td>
<?php
echo $html->link($contact['Contact'][name'],
"contacts/view/{$contact['Contact']['id']}")?>
[<?php echo $html->link('Edit',
"contacts/edit/{$contact['Contact']['id']}")?>,
<?php echo $html->link('Delete',
"contacts/delete/{$contact['Contact']['id']}",
null, 'Sure?')?>]
</td>
<td><?php echo $contact['Contact']['created']; ?>
</td>
</tr>
<?php endforeach; ?>
</table>
View
views/contacts/view.thtml
<h1><?php echo $data['Contact']['name']?
></h1>
<p><small>
Created: <?php echo $data['Contact']
['created']?>
</small></p>
<p><?php echo $data['Contact']['number']?
></p>
View
views/contacts/add.thtml
<h1>Add Contact</h1>
<form action="<?php echo $html->url("contacts/add"); ?
>" method="post">
<p>Name:
<?php echo $html->input('Contact/name',
array('size' => '40')) ?>
</p>
<p>Number:
<?php echo $html->input('Contact/number',
array('size' => '40')) ?>
</p>
<p><?php echo $html->submit('Save') ?>
</p>
</form>
View
views/contacts/edit.thtml
<h1>Edit Contact</h1>
<form action="<?php echo $html->url('/contacts/edit')?
>" method="post">
<?php echo $html->hidden('Contact/id'); ?>
<p>Name:
<?php echo $html->input('Contact/name',
array('size' => '40')) ?>
</p>
<p>Number:
<?php echo $html->input('Contact/number',
array('size' => '40')) ?>
</p>
<p>
<?php echo $html->submit('Save') ?>
</p>
</form>
Controller
/app/controllers/notes_controller.php:
<?php
class ContactsController extends AppController
{
var $name = 'Contacts';
function index() {
$this->set('contacts', $this->Contact>findAll());
}
function view($id) {
$this->Contact->id = $id;
$this->set('data', $this->Contact->read());
}
Controller
/app/controllers/notes_controller.php:
function add() {
if (!empty($this->data['Contact'])) {
if($this->Contact->save($this->data['Contact'])) {
$this->flash('Your contact has been added.',
/contacts/');
}
}
}
function delete($id) {
if ($this->Contact->del($id)) {
$this->flash('The contact with id: '.$id.' has been
deleted.', /contacts/');
}
}
Controller
/app/controllers/notes_controller.php:
Resulting application
../cake/contacts/add
../cake/contacts/edit/1
../cake/contacts/view/4
Other benefits
Bake script command line script
generator
Uses LAMP common web platform
(Linux, Apache, MySQL and PHP)
Disadvantages
Mainly due to the limitations of PHP
Clumsy OOP
Access data through arrays not classes (which
RoR does) more code in view
Create tables in separate SQL
Not well documented yet