CakePHP   Bakery   API   Manual   Forge   Trac




                                  1.2 @ OCPHP
                         ...
CakePHP   Bakery   API   Manual   Forge   Trac




                              Why CakePHP?
                    MVC arch...
CakePHP   Bakery   API   Manual   Forge   Trac




           CakePHP the right way


                                    ...
CakePHP   Bakery   API   Manual   Forge   Trac




                   Hot out of the oven
                          Behavi...
CakePHP   Bakery   API   Manual   Forge   Trac




                                             Behaviors
                ...
CakePHP   Bakery   API     Manual   Forge   Trac




                   <?php
                   class CoolBehavior extend...
CakePHP   Bakery   API   Manual   Forge   Trac



           <?php
           class Post extends AppModel {

             ...
CakePHP   Bakery   API   Manual   Forge   Trac




                   “With” Associations
                    enables extr...
CakePHP   Bakery   API   Manual   Forge   Trac




                                  Adding “With”
                       ...
CakePHP   Bakery   API   Manual   Forge   Trac




                                    Using “With”
                    <?...
CakePHP   Bakery   API   Manual   Forge   Trac




                           Validation is King
                   alphaN...
CakePHP   Bakery   API   Manual   Forge   Trac




                              Using Validation
             <?php
     ...
CakePHP   Bakery   API   Manual   Forge   Trac




                     Forms made simple
             <?php 

           ...
CakePHP   Bakery   API   Manual   Forge   Trac




                         More about Forms
             <?php 
         ...
CakePHP   Bakery   API   Manual   Forge   Trac




                                            Pagination
             <?p...
CakePHP   Bakery   API   Manual   Forge   Trac




                                            i18n/L10n
                 ...
CakePHP   Bakery   API   Manual   Forge   Trac




                                      gettext style
          <?php
   ...
CakePHP   Bakery   API   Manual   Forge   Trac




                   Translation Behavior
             <?php
            ...
CakePHP   Bakery   API   Manual   Forge   Trac




                                                 Acl
                  ...
CakePHP       Bakery   API   Manual   Forge   Trac




                                          Acl behavior
    <?php   ...
CakePHP   Bakery   API   Manual   Forge   Trac




                                                 Routing
              ...
CakePHP    Bakery   API   Manual   Forge   Trac




                           Reversing Routes
          <?php
          ...
CakePHP   Bakery   API    Manual   Forge   Trac




                                   Magic Variables
               	   ...
CakePHP   Bakery   API   Manual   Forge    Trac




                                      Named Args
                     ...
CakePHP   Bakery   API   Manual   Forge   Trac




                         Parsing Extensions
                         /*...
CakePHP   Bakery   API   Manual   Forge   Trac




                                                      Email
           ...
CakePHP   Bakery   API   Manual   Forge   Trac




                                                 Security
             ...
CakePHP   Bakery   API   Manual   Forge   Trac




                                  Authentication
                      ...
CakePHP   Bakery   API   Manual     Forge   Trac




                                            Auth setup
              ...
CakePHP   Bakery   API   Manual   Forge   Trac




                         Authorize a Model
                     <?php
 ...
CakePHP   Bakery   API    Manual   Forge   Trac




           Authorize a Controller
                     <?php
         ...
CakePHP   Bakery   API   Manual   Forge   Trac




                          Authorize CRUD
                           <?p...
CakePHP   Bakery   API   Manual   Forge   Trac




                                            Configure
                  ...
CakePHP   Bakery   API   Manual   Forge    Trac




                                  Cache Engines
                      ...
CakePHP   Bakery   API   Manual   Forge   Trac




                                                 Console
              ...
CakePHP   Bakery   API   Manual   Forge   Trac




                                          Core Shells
                 ...
CakePHP   Bakery   API   Manual   Forge   Trac




                                  The Bake Shell
                      ...
CakePHP   Bakery   API   Manual   Forge   Trac




                              Your Own Shell
                          ...
CakePHP   Bakery   API   Manual   Forge   Trac




                                                 More....
             ...
CakePHP   Bakery   API   Manual   Forge   Trac




                                    Questions?




                    ...
Upcoming SlideShare
Loading in...5
×

Cake Php 1.2 (Ocphp)

14,964

Published on

gwoo's (rd11.net) slide when presenting at the recent OCPHP event about the latest development in CakePHP 1.2

Published in: Technology, Business
2 Comments
11 Likes
Statistics
Notes
No Downloads
Views
Total Views
14,964
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
523
Comments
2
Likes
11
Embeds 0
No embeds

No notes for slide

Cake Php 1.2 (Ocphp)

  1. 1. CakePHP Bakery API Manual Forge Trac 1.2 @ OCPHP August 9, 2007 © 2007 Cake Software Foundation
  2. 2. CakePHP Bakery API Manual Forge Trac Why CakePHP? MVC architecture Convention over Configuration Flexible and Extensible Write less, do more Open Source, Large Community MIT License © 2007 Cake Software Foundation
  3. 3. CakePHP Bakery API Manual Forge Trac CakePHP the right way by: Amy Hoy, http://slash7.com/ Think twice, code once Loose couple © 2007 Cake Software Foundation
  4. 4. CakePHP Bakery API Manual Forge Trac Hot out of the oven Behaviors Router “With” Associations Email Enhanced Validation Security Forms Authentication Pagination Configure i18n + l10n Cache Engines Acl Console © 2007 Cake Software Foundation
  5. 5. CakePHP Bakery API Manual Forge Trac Behaviors extend models encapsulate reusable functionality use callbacks for automagic © 2007 Cake Software Foundation
  6. 6. CakePHP Bakery API Manual Forge Trac <?php class CoolBehavior extends ModelBehavior { var $settings = array(); function setup(&$model, $config = array()) { $this->settings = $config; } /* Callbacks */ function beforeFind(&$model, $query) { } function afterFind(&$model, $results, $primary) { } function beforeSave(&$model) { } function afterSave(&$model, $created) { } function beforeDelete(&$model) { } function afterDelete(&$model) { } function onError(&$model, $error) { } /* Custom Methods */ function myCustomMethod(&$model, $data = array()) { return array_merge($model->data, $data); } } ?> © 2007 Cake Software Foundation
  7. 7. CakePHP Bakery API Manual Forge Trac <?php class Post extends AppModel { var $actsAs = array(‘Cool’=>array(‘field’=>’cool_id’)); function doSomething($cool = null) { $this->myCustomMethod(array(‘cool_id’=> $cool)); } } ?> <?php class PostsController extends AppController { var $name = ‘Posts’; function index() { $this->set(‘posts’, $this->Post->doSomething(5)); } } ?> © 2007 Cake Software Foundation
  8. 8. CakePHP Bakery API Manual Forge Trac “With” Associations enables extra fields in join tables access to model for join table tags posts posts_tag id id s key id title name post_id body created tag_id created modified modified date © 2007 Cake Software Foundation
  9. 9. CakePHP Bakery API Manual Forge Trac Adding “With” <?php class Post extends AppModel { var $hasAndBelongsToMany = array( ‘Tag’ => array( ‘className’ => ’Tag’, ‘with’ => ‘TaggedPost’, ) ); function beforeSave() { if(!empty($this->data[‘Tag’])) { $this->TaggedPost->save($this->data[‘Tag’]); } } } ?> © 2007 Cake Software Foundation
  10. 10. CakePHP Bakery API Manual Forge Trac Using “With” <?php class PostsController extends AppController { var $name = ‘Posts’; function tags() { $this->set(‘tags’, $this->Post->TaggedPost->findAll()); } } ?> <?php foreach ($tags as $tag) : echo $tag[‘Post’][‘title’]; echo $tag[‘Tag’][‘name’]; echo $tag[‘TaggedPost’][‘date’]; endforeach; ?> © 2007 Cake Software Foundation
  11. 11. CakePHP Bakery API Manual Forge Trac Validation is King alphaNumeric email number between equalTo numeric blank file phone cc ip postal comparison maxLength ssn custom minLength url date money userDefined decimal multiple © 2007 Cake Software Foundation
  12. 12. CakePHP Bakery API Manual Forge Trac Using Validation <?php class Post extends AppModel { var $validate = array( 'title' => array( 'required' => VALID_NOT_EMPTY, 'length' => array( 'rule' => array('maxLength', 100)) ), 'body' => VALID_NOT_EMPTY ); } ?> © 2007 Cake Software Foundation
  13. 13. CakePHP Bakery API Manual Forge Trac Forms made simple <?php  echo $form->create('Post');     echo $form->input('title', array('error' => array(          'required' => 'Please specify a valid title',          'length' => 'The title must have no more than 100 characters'      ) ) );  echo $form->input('body', array('error' => 'Please specify a valid body')); echo $form->end('Add'); ?> © 2007 Cake Software Foundation
  14. 14. CakePHP Bakery API Manual Forge Trac More about Forms <?php  /* Change the action */ echo $form->create('User', array(‘action’=> ‘login’)); ?> <?php  /* Change the type for uploading files */ echo $form->create('Image', array(‘type’=> ‘file’)); echo $form->input('file', array(‘type’=> ‘file’)); echo $form->end(‘Upload’); ?> <?php  /* the three line form */ echo $form->create('Post'); echo $form->inputs(‘Add a Post’); echo $form->end(‘Add’); ?> © 2007 Cake Software Foundation
  15. 15. CakePHP Bakery API Manual Forge Trac Pagination <?php class PostsController extends AppController { var $name = ‘Posts’; var $paginate = array(‘order’=> ‘Post.created DESC’); function index() { $this->set(‘posts’, $this->paginate()); } } ?> <?php echo $paginator->counter(array( 'format' => 'Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%' )); echo $paginator->prev('<< previous', array(), null, array('class'=>'disabled')); echo $paginator->numbers(); echo $paginator->sort(‘Created’); echo $paginator->next('next >>', array(), null, array('class'=>'disabled')); © 2007 Cake Software Foundation
  16. 16. CakePHP Bakery API Manual Forge Trac i18n/L10n built in gettext for static strings TranslationBehavior for dynamic data console extractor © 2007 Cake Software Foundation
  17. 17. CakePHP Bakery API Manual Forge Trac gettext style <?php /* echo a string */ __(‘Translate me’); /* return a string */ $html->link(__(‘Translate me’, true), array(‘controller’=>’users’)); /* by category : LC_CTYPE, LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES and LC_ALL.*/ __c(‘Translate me’, ‘LC_CTYPE’); /* get plurals by number*/ __n(‘Translate’, ‘Translates’, 2); /* override the domain.*/ __d(‘posts’, ‘Translate me’); /* override the domain by category.*/ __dc(‘posts’, ‘Translate me’, ‘LC_CTYPE’); © 2007 Cake Software Foundation
  18. 18. CakePHP Bakery API Manual Forge Trac Translation Behavior <?php class Post extends AppModel { var $actsAs = array(‘Translation’=> array(‘title’, ‘body’)); } ?> CREATE TABLE i18n_content ( CREATE TABLE i18n ( id int(10) NOT NULL auto_increment, id int(10) NOT NULL auto_increment, content text, locale varchar(6) NOT NULL, PRIMARY KEY (id) i18n_content_id int(10) NOT NULL, ); model varchar(255) NOT NULL, row_id int(10) NOT NULL, field varchar(255) NOT NULL, PRIMARY KEY (id), KEY locale (locale), KEY i18n_content_id (i18n_content_id), KEY row_id (row_id), KEY model (model), KEY field (field) ); © 2007 Cake Software Foundation
  19. 19. CakePHP Bakery API Manual Forge Trac Acl abstracted for maximum compatibility component for controller behavior for model © 2007 Cake Software Foundation
  20. 20. CakePHP Bakery API Manual Forge Trac Acl behavior <?php <?php class User extends AppModel { class Post extends AppModel { var $actsAs = array(‘Acl’=> ‘requester’); var $actsAs = array(‘Acl’=> ‘controlled’); function parentNode() {} function parentNode() {} function bindNode($object) { function bindNode($object) {} if (!empty($object['User']['role'])) { } return 'Roles/' . $object['User']['role']; ?> } } function roles() { return $this->Aro->findAll(); } } ?> © 2007 Cake Software Foundation
  21. 21. CakePHP Bakery API Manual Forge Trac Routing reverse routes magic variables named parameters parseExtensions REST resource mapping © 2007 Cake Software Foundation
  22. 22. CakePHP Bakery API Manual Forge Trac Reversing Routes <?php Route::connect(‘/’, array(‘controller’=>’pages’, ‘action’=>’display’, ‘home’)); ?> <?php echo $html->link(‘Go Home’, array(‘controller’=> ‘pages’, ‘action’=> ‘display’, home)); ?> © 2007 Cake Software Foundation
  23. 23. CakePHP Bakery API Manual Forge Trac Magic Variables $Action => Matches most common action names $Year => Matches any year from 1000 to 2999 $Month => Matches any valid month with a leading zero (01 - 12) $Day => Matches any valid day with a leading zero (01 - 31) $ID => Matches any valid whole number (0 - 99999.....) Router::connect( '/:controller/:year/:month/:day', array('action' => 'index', 'day' => null), array('year' => $Year, 'month' => $Month, 'day' => $Day) ); Router::connect( '/:controller/:id', array('action' => 'index', ‘id’=> ‘1’), array('id' => $ID) ); © 2007 Cake Software Foundation
  24. 24. CakePHP Bakery API Manual Forge Trac Named Args http://cakephp.org/posts/index/page:2/sort:title <?php class PostsController extends AppController { var $name = ‘Posts’; function index() { $this->passedArgs[‘page’]; $this->passedArgs[‘sort’]; } } ?> © 2007 Cake Software Foundation
  25. 25. CakePHP Bakery API Manual Forge Trac Parsing Extensions /* get everything */ Router::parseExtensions(); /* more fine grained */ Router::parseExtensions(‘xml’, ‘html’); maps views to unique locations http://cakephp.org/posts/index.rss Router::parseExtensions(‘rss’); <?php //app/views/posts/rss/index.ctp echo $rss->items($posts, 'transformRSS'); function transformRSS($post) { return array( 'title' => $post['Post']['title'], 'link' => array('url'=>'/posts/view/'.$post['Post]['id']), 'description' => substr($post['Post']['body'], 0, 200), 'pubDate' => date('r', strtotime($post['Post']['created'])), ); } ?> © 2007 Cake Software Foundation
  26. 26. CakePHP Bakery API Manual Forge Trac Email $this->Email->to = $user['User']['email']; $this->Email->from = Configure::read('Site.email'); $this->Email->subject = Configure::read('Site.name').' Password Reset URL'; $content[] = 'A request to reset you password has been submitted to '.Configure::read('Site.name'); $content[] = 'Please visit the following url to have your temporary password sent'; $content[] = Router::url('/users/verify/reset/'.$token, true); if($this->Email->send($content)) { $this->Session->setFlash('You should receive an email with further instruction shortly'); $this->redirect('/', null, true); } /* Sending HTML and Text */ $this->Email->sendAs = ‘both’; $this->Email->template = ‘reset_password’; /* HTML templates */ //app/views/elements/email/html/reset_password.ctp /* TEXT templates */ //app/views/elements/email/text © 2007 Cake Software Foundation
  27. 27. CakePHP Bakery API Manual Forge Trac Security HTTP Auth <?php class PostsController extends AppController { var $name = ‘Posts’; var $components = array(‘Security’); function beforeFilter() { $this->Security->requireLogin(‘add’, ‘edit’, ‘delete’); $this->Security->loginUsers = array('cake'=>'tooeasy'); } } ?> © 2007 Cake Software Foundation
  28. 28. CakePHP Bakery API Manual Forge Trac Authentication <?php class PostsController extends AppController { var $name = ‘Posts’; var $components = array(‘Auth’); } ?> authenticate any model: User, Member, Editor, Contact authorize against models, controllers, or abstract objects automate login © 2007 Cake Software Foundation
  29. 29. CakePHP Bakery API Manual Forge Trac Auth setup <?php class PostsController extends AppController { var $name = ‘Posts’; var $components = array(‘Auth’); function beforeFilter() { $this->Auth->userModel = 'Member'; $this->Auth->loginAction = '/members/login'; $this->Auth->loginRedirect = '/members/index'; $this->Auth->fields = array('username' => 'username', 'password' => 'pword'); $this->Auth->authorize = array('model'=>'Member'); $this->Auth->mapActions(array( 'read' => array('display'), 'update' => array('admin_show', 'admin_hide'), )); } } ?> © 2007 Cake Software Foundation
  30. 30. CakePHP Bakery API Manual Forge Trac Authorize a Model <?php class Member extends Model { var $name = 'Member'; function isAuthorized($user, $controller, $action) { switch ($action) { case 'default': return false; break; case 'delete': if($user[['Member']['role'] == 'admin') { return true; } break; } } } ?> © 2007 Cake Software Foundation
  31. 31. CakePHP Bakery API Manual Forge Trac Authorize a Controller <?php class PostsController extends AppController { var $name = ‘Posts’; var $components = array(‘Auth’); function beforeFilter() { $this->Auth->authorize = ‘controller’; } function isAuthorized() { if($this->Auth->user('role') == 'admin') { return true; } } } ?> © 2007 Cake Software Foundation
  32. 32. CakePHP Bakery API Manual Forge Trac Authorize CRUD <?php class PostsController extends AppController { var $name = ‘Posts’; var $components = array(‘Auth’); function beforeFilter() { $this->Auth->authorize = ‘crud’; $this->Auth->actionPath = 'Root/'; } } ?> $this->Acl->allow('Roles/Admin', 'Root'); $this->Acl->allow('Roles/Admin', 'Root/Posts'); © 2007 Cake Software Foundation
  33. 33. CakePHP Bakery API Manual Forge Trac Configure <?php Configure::write(‘Oc.location’, ‘Buddy Group’); Configure::write(‘Oc’, array(‘location’=>‘Buddy Group’)); Configure::read(‘Oc.location’); Configure::store('Groups', 'groups', array('Oc' => array(‘location’=>’Buddy Group’))); Configure::load('groups'); ?> © 2007 Cake Software Foundation
  34. 34. CakePHP Bakery API Manual Forge Trac Cache Engines File xcache APC Model Memcache Cache::engine(‘File’, [settings]); $data = Cache::read(‘post’); if(empty($data)) { $data = $this->Post->findAll(); Cache::write(‘post’, $data); } © 2007 Cake Software Foundation
  35. 35. CakePHP Bakery API Manual Forge Trac Console Makes writing Command Line Interfaces (CLI) cake Shells Tasks Access to models © 2007 Cake Software Foundation
  36. 36. CakePHP Bakery API Manual Forge Trac Core Shells Acl Extractor Bake Console API © 2007 Cake Software Foundation
  37. 37. CakePHP Bakery API Manual Forge Trac The Bake Shell Tasks Model - cake bake model Post Controller - cake bake controller Posts View - cake bake view Posts DbConfig - cake bake db_config Project - cake bake project Custom view templates, oh yeah! © 2007 Cake Software Foundation
  38. 38. CakePHP Bakery API Manual Forge Trac Your Own Shell <?php class DemoShell extends Shell { var $uses = array('Post'); var $tasks = array('Whatever', 'Another'); function initialize() {} function startup() {} function main() { $this->out('Demo Script'); } function something() { $this->Whatver->execute(); } function somethingElse() { $posts = $this->Post->findAll(); foreach($posts as $post) { $this->out(‘title : ‘ . $post[‘Post’][‘title’]); } } } ?> © 2007 Cake Software Foundation
  39. 39. CakePHP Bakery API Manual Forge Trac More.... Xml reading and writing HttpSockets Themes Cookies ...... © 2007 Cake Software Foundation
  40. 40. CakePHP Bakery API Manual Forge Trac Questions? © 2007 Cake Software Foundation
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×