Successfully reported this slideshow.

Ch ch-changes cake php2

10

Share

Loading in …3
×
1 of 65
1 of 65

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

Ch ch-changes cake php2

  1. 1. Ch-ch-anges C a k e P H P 2 . 0
  2. 2. CakePHP 2.0 No more PHP4, PHP 5.2.6+ Many re-factored/re-built internal & external API’s New features! Faster! Updated conventions.
  3. 3. PHP5 Use native features: Exceptions. Filter ext. PDO. SPL. json_encode()
  4. 4. Conventions
  5. 5. Updated conventions ClassName = FileName.php View/Helper/HtmlHelper.php => HtmlHelper. CamelCased directories. Preparing for PHP5.3 and PSR-0
  6. 6. New loader App::import() - Old and busted. App::uses() - New hawtness.
  7. 7. Examples
  8. 8. Examples App::uses(‘AuthComponent’, ‘Controller/Component’);
  9. 9. Examples App::uses(‘AuthComponent’, ‘Controller/Component’); Classname
  10. 10. Examples App::uses(‘AuthComponent’, ‘Controller/Component’); Classname Package
  11. 11. Examples App::uses(‘AuthComponent’, ‘Controller/Component’); Classname Package App::uses(‘CakeEmail’, ‘Network/Email’);
  12. 12. Examples App::uses(‘AuthComponent’, ‘Controller/Component’); Classname Package App::uses(‘CakeEmail’, ‘Network/Email’); Classname
  13. 13. Examples App::uses(‘AuthComponent’, ‘Controller/Component’); Classname Package App::uses(‘CakeEmail’, ‘Network/Email’); Classname Package
  14. 14. Packages Use App::build() to define paths where any package lives. Sensible defaults come built in. Undefined packages default to checking app/Lib
  15. 15. paths Use App::build() to define paths where packages can be found. Can use App::PREPEND and App::APPEND to control insertion order.
  16. 16. Bad things happen
  17. 17. Exceptions Object::cakeError() is dead. New Exceptions & Exception handling replace it. More extensible and configurable handling.
  18. 18. Example 1 <?php 2 // Customize the renderer. 3 Configure::write('Exception', array( 4 'handler' => 'ErrorHandler::handleException', 5 'renderer' => 'MyCustomExceptionRenderer', 6 'log' => true 7 )); 8 9 // Replace everything. 10 Configure::write('Exception', array( 11 'handler' => function ($e) { 12 echo 'Oh noes'; 13 } 14 ));
  19. 19. Built-in exceptions All previous Object::cakeError() are exceptions. Improved testing. Suite of HTTP exceptions. Great for error pages. CakeException for development errors. Treated as 500 errors in production.
  20. 20. HTTP Exceptions Most common HTTP exceptions are built in. The names are what you would expect. Configured Exception handler will get the exceptions and render an error page.
  21. 21. HttpExceptions 1 <?php 2 public function view($id = null) { 3 $this->Tag->id = $id; 4 if (!$this->Tag->exists()) { 5 throw new NotFoundException(__('Invalid tag')); 6 } 7 $this->set('tag', $this->Tag->read(null, $id)); 8 }
  22. 22. Error Configuration Configure used for error/exception settings. Sensible defaults. Uses Debugger in development Logs errors in production. You can change out the whole thing.
  23. 23. i18n
  24. 24. i18n No more true. Automatic sprintf()
  25. 25. Examples __(‘Some string’) Always returns. __(‘Some %s’, $value); Does what you want it to.
  26. 26. Unify disparate apis
  27. 27. Unify & syngergize Helper, Components, Behaviors & Tasks. Similar, but interacting with each was slightly different. Collection objects unify all of them. HelperCollection, ComponentCollection, TaskCollection, BehaviorCollection
  28. 28. Collections Load objects at runtime. Unload objects. Alias objects. Trigger callbacks.
  29. 29. Loading $Html = $this->Helpers->load(‘Html’, $settings); $this->Html works from that point forward. The same API exists for components, tasks, behaviors.
  30. 30. Aliasing 1 <?php 2 public $helpers = array( 3 'Html' => array( 4 'className' => 'MyHtmlHelper' 5 ) 6 );
  31. 31. Aliasing Once an alias is created, that alias is used everywhere. With the above controller code, all other Helpers would use MyHtmlHelper for $this->Html.
  32. 32. Unload and disable $this->Components->disable(‘Auth’); $this->Components->enable(‘Auth’); $this->Components->unload(‘Auth’);
  33. 33. Callbacks $this->Helpers->trigger(‘beforeRender’, array (&$this)); Fires method on all enabled objects. Implement custom hooks in base classes.
  34. 34. Console
  35. 35. Console improvements Coloured output & output levels. Less coupled & easier to test. Better input handling. Generated help. XML help. Good for integration with other tools.
  36. 36. COLORZ Simple formatting to add styles to output. $this->out(‘<warning>Uh oh</warning>’); $this->out(‘<error>Kaboom</error>’); $this->out(‘<info>Hi</info>’, 1, Shell::VERBOSE);
  37. 37. Input handling More unix-y input handling. Long and short options. Validated options. Boolean options. Required arguments.
  38. 38. Generated help Defining command structure with ConsoleOptionParser means you get help for free. --help and -h supported by all shells. --help xml generates xml help.
  39. 39. Request & Response
  40. 40. CakeRequest Consolidates request interrogation logic. $this->request everywhere. Lower memory use by not copying arrays everywhere. Backwards compatible read only interface still around.
  41. 41. CakeResponse Consolidates response generation. $this->response everywhere. Deprecated methods still around. Controllers can return response objects.
  42. 42. example 1 <?php 2 class PostsController extends AppController { 3 public function simple() { 4 return new CakeResponse(array( 5 'body' => 'Simple response' 6 )); 7 } 8 }
  43. 43. Sessions
  44. 44. Sessions Sessions were tough in the past. Custom session handlers weren’t on the same field as core ones.
  45. 45. Sessions Core, App, and Plugin session handlers all work the same. CakeSessionInterface interface has to be implemented. Same built-in options exist.
  46. 46. Using built-ins 1 <?php 2 Configure::write('Session', array( 3 'defaults' => 'php' 4 )); 5 Configure::write('Session', array( 6 'defaults' => 'database' 7 )); 8 Configure::write('Session', array( 9 'defaults' => 'cache', 10 'handler' => array( 11 'config' => 'session' 12 ) 13 ));
  47. 47. Using an app/plugin 1 <?php 2 Configure::write('Session', array( 3 'defaults' => 'database', 4 'handler' => array( 5 'engine' => 'Custom' 6 ) 7 )); 8 Configure::write('Session', array( 9 'defaults' => 'php', 10 'handler' => array( 11 'engine' => 'Plugin.SessionHandler' 12 ), 13 'ini' => array( 14 'session.cookie_httponly' => true 15 ) 16 ));
  48. 48. Authorization
  49. 49. AuthComponent Split into authorization and authentication adapters. Easier to modify and extend. No magic logins. No magic hashing of passwords.
  50. 50. Built-ins Authentication Authorization Form. Controller. HTTP Basic. Actions (Acl) HTTP Digest. CRUD (Acl) custom custom
  51. 51. Logging in 1 <?php 2 class UsersController extends AppController { 3 public function login() { 4 if ($this->request->is('post')) { 5 if ($this->Auth->login()) { 6 $this->Session->setFlash('Welcome back!'); 7 $this->redirect($this->Auth->redirect()); 8 } else { 9 $this->Session->setFlash('Login credentials were invalid.'); 10 } 11 } 12 } 13 }
  52. 52. Auth Configuration Way less, because there is less magic. Easier for beginners to grok. Easier for veterans to customize.
  53. 53. Email
  54. 54. Email Decomposed into several classes. Email is easily accessible from models & shells. EmailComponent is deprecated, because it doesn’t really add anything at this point.
  55. 55. Simple Example 1 <?php 2 App::uses('CakeEmail', 'Network/Email'); 3 $mail = new CakeEmail(); 4 $mail->from('mark.story@gmail.com', 'Mark Story') 5 ->to('steve@apple.com', 'Steve Jobs') 6 ->subject('Love the new imacs') 7 ->send('I <3 you so much.');
  56. 56. Templates 1 <?php 2 App::uses('CakeEmail', 'Network/Email'); 3 $mail = new CakeEmail(); 4 $mail->from('mark.story@gmail.com', 'Mark Story') 5 ->to('steve@apple.com', 'Steve Jobs') 6 ->subject('Love the new imacs') 7 ->template('love_you', 'simple') 8 ->emailFormat('html') 9 ->viewVars($vars) 10 ->send();
  57. 57. Mail Transports Extracted out as separate classes. 3 built-in transports, and you can make your own.
  58. 58. Testing
  59. 59. Testing PHPUnit is the de-facto standard. SimpleTest is less feature rich, and didn’t have a PHP5 compatible version when we started. Tune in for my talk on PHPUnit.
  60. 60. Performance
  61. 61. All win Lazy loading everywhere it made sense. Components, helpers, associated models. Removed most getInstance() methods. New conventions mean less Inflector calls. Streamlined dispatch cycle. Persistent dbo cache.
  62. 62. Hello World (rps) 350.0 262.5 CakePHP 1.3.11 CakePHP 2.0-beta 175.0 87.5 0 Hello world siege -b -c 20 -r 100 http://localhost/hello/world
  63. 63. Basic blog (rps) 50.0 37.5 CakePHP 1.3.11 CakePHP 2.0-beta 25.0 12.5 0 Basic blog siege -b -c 20 -r 100 http://localhost/posts
  64. 64. Functions called Hello World Basic Blog 500 375 250 125 0 CakePHP 1.3.11 CakePHP 2.0-beta Collected using webgrind and xdebug
  65. 65. Questions?

×