Transcript Views

PHP
+
Framework
+
MVC
CakePHP Lectures
1
What
is
Framework?
CakePHP Lectures
2
Common code - Generic functionality
Extensible - Specific functionality
Unlike library – Flow Dictated by
Framework
CakePHP Lectures
3
Reusable Design- May include:
Support programs
Code libraries
Tools to develop and glue different
components
CakePHP Lectures
4
Why
a
Framework?
CakePHP Lectures
5
I am lazy
enough to write
long codes,
NAAAH...
CakePHP Lectures
6
Technical Aspects:
Proven Architecture
Efficient (Code Re-usability)
Scalable
Extensible
Modularity
CakePHP Lectures
7
Developer Aspects:
Easier maintenance
Shorter development times.
Flexible and less error-prone
CakePHP Lectures
8
Focus => Specialized Functionality
NOT
Architecture
Common Tools
Work Flow
CakePHP Lectures
9
How
to choose
Framework?
CakePHP Lectures
10
CakePHP Lectures
11
Ofcourse,
NOT
CakePHP Lectures
12
Technical Aspects:
Types of application, Types of framework
Technical features of the framework
Ease of development
Ease of testing
Tool support
CakePHP Lectures
13
Viability Aspects:
Frequent release
Future enhancement
Maturity – real life usage cases
Proven market place?
Production Environments?
CakePHP Lectures
14
So, which one?
CakePHP Lectures
15
The one which answers most of
the above questions.
CakePHP Lectures
16
PHP
+
Framework
+
MVC
CakePHP
CakePHP Lectures
17
Free Open Source
Rapid Application Development
Active Community
Compatibility with PHP4 and PHP5
Project Age - 5yrs
CakePHP Lectures
18
MVC
Components
Scaffolding
Helpers
Validation
Security
Data Sanitation
Session
ACL
Caching
CakePHP Lectures
19
Easy Installation – 2 Mins
Easy Debugging
Integrated Unit Testing
CakePHP Lectures
20
Setting Up Cake:
Setup Database Configuration
CakePHP supports database drivers:
• mysql
• postgres
• sqlite
• pear-drivername (e.g. pear-mysql)
• adodb-drivername
CakePHP Lectures
21
Cake Folder Structure
• app/
•
•
•
•
•
•
•
•
config/
controllers/
models/
plugins/
tmp/
vendors/
views/
webroot/
• cake/
• config/
• docs/
• libs/
• vendors/
CakePHP Lectures
22
tmp
This is where CakePHP stores temporary data. The actual data it
Folder stores depends
What on
it Contains
how you have CakePHP configured, but this
folder is usually used to store model descriptions, logs, and
sometimes session information.
the folder
(few) configuration
files
Database
Make sureHolds
that this
exists and that
it isCakePHP
writable,uses.
otherwise
config the performance
connection
details,
bootstrapping,
core configuration
files
of your
application
will be severely
impacted. In
and CakePHP
more should
be stored
debug mode,
will warn
you ifhere.
it is not the case.
Any third-party classes or libraries should be placed here. Doing so
Contains
application’s
controllers and their 'name')
makes them
easy toyour
access
using the App::import('vendor',
controllers
components.
function. Keen
observers will note that this seems redundant, as
vendors
there is also a vendors folder at the top level of our directory
locale structure. Stores
string
internationalization.
We'll get
intofiles
the for
differences
between the two when we
discuss managing
applications
and more
complex
system
Containsmultiple
your application’s
models,
behaviors,
and
models setups.
datasources.
Presentational files are placed here: elements, error pages, helpers,
views plugins
Contains
plugin packages.
layouts, and
view files.
webroot
In a production setup, this folder should serve as the document
root for your application. Folders here also serve as holding places
for CSS stylesheets, images, and JavaScript files.
CakePHP Lectures
23
• The app folder will be where you work your magic:
it’s where your application’s files will be placed.
• The cake folder is where we’ve worked our magic.
Make a personal commitment not to edit files in
this folder. We can’t help you if you’ve modified
the core.
• Finally, the vendors folder is where you’ll place
third-party PHP libraries you need to use with your
CakePHP applications.
CakePHP Lectures
24
Models:
• Access point to a certain table in the
database
• Contain data validation rules, association
information, and methods specific to the
table
• Extends AppModel
CakePHP Lectures
25
Models:
• Table name in plural, like "users" and
models in singular “user”.
• Mandatory Primary key named 'id'.
• Foreign keys naming: 'article_id'.
(singular-table-name_id).
• 'created' / 'modified' column are
automatically populated.
CakePHP Lectures
26
Controllers:
• Manage the logic for a certain section or
a single model.
• Include any number of actions
• Actions are functions used in your web
application to display views
• Extends AppController
CakePHP Lectures
27
class VideosController extends AppController
{
function view($id)
{
//action logic goes here..
}
function rent($customer_id, $video_id)
{
//action logic goes here..
}
function search($query)
{
//action logic goes here..
}
}
example URLs:
http://www.example.com/videos/view/253
http://www.example.com/videos/rent/5124/0-2352
CakePHP Lectures
28
Controller action as a webservice
• Set WEBSERVICES in /
app/config/core.php to 'on'
• Structure the logic in controller just
as you normally would
CakePHP Lectures
29
Views:
a page template, usually named after an
action.
view for PostsController::add() would be
found at
/app/views/posts/add.ctp.
simply PHP files, so you can use any
PHP code inside them
CakePHP Lectures
30
Views:
data is passed as an array called $data
data handed to the view using set() in the
controller is also available in view.
HTML helper is available in every view by
default
layout contains presentational code that
wraps around view. Usually, common for
one controller.
CakePHP Lectures
31
Scaffolding:
• Way of getting the early parts of
developing a web application started.
• Analyze database tables and creates
standard lists, add, delete, edit.
• Add scaffolding by adding the $scaffold
variable to controller.
CakePHP Lectures
32
Components:
Components are used to aid controllers in specific situations.
A Reusable code which seamlessly sits inside Controller
Sample Component Class
class FooComponent extends Object
{
var $someVar = null;
var $controller = true;
function startup(&$controller)
{
// Perform controller initialization here.
}
function doFoo()
{
$this->someVar = 'foo';
}
}
CakePHP Lectures
33
add the following code in your controller's
definition:
var $components =
array('Foo');
Inside of that controller you could now
use:
$this->Foo->doFoo();
CakePHP Lectures
34
Helpers:
Common functions to format views.
Quick-and-easy creation of web forms
image($path, $htmlAttributes, $return
Renders an image tag.
= false);
tableHeaders($names, $tr_options,
$th_options);
create a formatted table header.
CakePHP Lectures
35
Other Helpers:
AJAX
Javascript
Number
Text
Time
Cache
(You can create your own helper.)
CakePHP Lectures
36
Data Validation:
Data in a Model conforms to the business rules.
Example /app/models/user.php
<?php
class User extends AppModel
{
var $name = 'User';
var $validate = array(
'login' => '/[a-z0-9\_\-]{3,}$/i',
'password' => VALID_NOT_EMPTY,
'email' => VALID_EMAIL,
'born' => VALID_NUMBER
);
}
?>
CakePHP Lectures
37
Plugins:
Distribute combination of controllers, models, and views as
package.
Example: Pizza Ordering Filesystem Layout
/app
/plugins
/pizza
/controllers <- plugin controllers go
here
/models <- plugin models go here
/views <- plugin views go here
/pizza_app_controller.php <- plugin's AppController,named after the
plugin
/pizza_app_model.php <- plugin's AppModel, named after the
plugin
CakePHP Lectures
38
ACL:
Access Request Objects (AROs) and
Access Control Objects (ACOs)
$aro = new Aro();
// Create ARO
$aro->create( 1, null, 'Bob Marley' );
// Create Groups
$aro->create(0, null, 'Artists');
//Hook ARO with Group
$aro->setParent('Artists', 'Bob Marley');
CakePHP Lectures
39
Creating ACOs and assigning permissions
$aco = new Aco();
//Create some access control objects:
$aco->create(1, null, 'Electric Guitar');
$this->Acl->allow('Abraham Lincoln', 'Electric
Guitar','read');
CakePHP Lectures
40
// Check Access
$access =
$this->Acl->check($this->Session->
read('user_alias'), $aco, $action = "*");
//access denied
if ($access === false)
{
echo "access denied";
exit;
}
CakePHP Lectures
41
Data Sanitation:
Makes User Given Data Safe for use in SQL and
HTML
// First, include library and instantiate:
uses('sanitize');
$mrClean = new Sanitize();
$badString = ";:<script><html>< // >@@#";
echo $mrClean->paranoid($badString);
// output: scripthtml
echo $mrClean->paranoid($badString,
array(' ', '@'));
// output: scripthtml @@
CakePHP Lectures
42
Sessions:
Here are some of the functions you'll use most:
check ($name);
del ($name);
delete ($name);
Error ();
flash ($key = 'flash');
read ($name);
renew ();
;
CakePHP Lectures
43
Security:
RequirePost()
class ThingsController extends AppController
{
var $components = array('Security');
function beforeFilter()
{
$this->Security->requirePost('delete');
}
function delete($id)
{
// This will only happen if the action is called via an HTTP POST
request
$this->Thing->del($id);
}
}
CakePHP Lectures
44
5 Mins
Blog Tutorial
with
Unit Testing
CakePHP Lectures
45