home
Blog

4 Best CakePHP Behaviors

CakePHP is our framework of choice here at Paravel.  I spend a lot of time on CakeForgeThe Bakery, the Cookbook, and the API looking for code and examples either A: because I sometimes don’t know what I’m doing, or B: I want to know THE best convention to for the answer I’m looking for.  

After countless hours of using these mind-altering codes, I -authoritatively- present to the Top 4 Behaviors that everyone should be using in their apps… or else…

#4 Containable

This is hot off the shelf and new to CakePHP 1.2 and it makes a world of difference. When querying items in the database, Cake likes to SELECT records wtih all it’s belongsTo, hasMany, and HABTMs (“habtems”) auto-magically associated. With the Containable Behavior you can stop all that nonsense and speed up your app by having it contain the JOIN to a “short list” of approved “models”…

The Containable Behavior is like the bouncer at a fancy Hollywood club where if you’re not on the list, you get kicked to the curb and have to watch all the other “approved” models go by. Hot, hot models.

More concretely, let’s say you had a Posts table and you wanted to get only the comments in the view, while simultaneously ignoring all the Author, Tags, Categories, etc.

/app/models/post.php

class Post extends AppModel {
  var $name = "Post";
  var $actsAs = array('Containable'); 

// forgive the over-simplification of these.
  var $hasMany = array('Comments');
  var $belongsTo = array('Author');
  var $hasAndBelongsToMany = array('Tags','Category');

}

/app/controllers/posts_controller.php

function view_a_post_with_only_comments($id = null) {
  if(!$id) {
    $this->Session->setFlash('You forgot the ID number.');
    $this->redirect('/');
  }
  $this->Post->contain('Comment');
  $this->set('posts', $this->Post->read(null, $id));
}

It’s that easy! now you’ll only be pulling the Post and the Comments! ka-chow!  This

#3 Tree

I love trees. My wife has a particular affinity towards them. If you like trees then you will be a fan of this behavior. If you do not like trees, I suggest you eat a bowl of hair because you are a du-mmy. Over the course of the last year I’ve made a few category systems in my apps and all of them left me feeling like i did something wrong and/or patched the code together in a terrible way.

Enter Tree Behavior! It’s been around forever and a half, and I don’t know why I didn’t use it, but it makes organizing things like categories, forum posts, comment threads, etc a whiz! All you need is to add another couple of fields to the database and then add one line to your model.

categories.sql

create table categories (
  id integer 11 auto_increment,
  name varchar 50 null,
  parent_id integer 11 null,
  rght integer 11 null,
  lft integer 11 null
); engine=MySAM encode=UTF-8

app/models/category.php

class Category extends Model {
  var $name = 'Category';
  var $actsAs = array('Tree');

// ideally categories should describe something,
// so this is just an example association.

  var $hasMany = array('Post');
  ...
} ?>

Now you’re cooking with grease! It will automatically keep track of your tree structure – who comes before this, who comes after (“left and right”), who is the parent, etcetera. Couldn’t be easier.

Move on to the next page for the Top 2 CakePHP behaviors:

Pages: 1 2

December 8th, 2008 | davatron5000 | Add a Comment comments

About

Hello, I'm dave rupert

beforeafter

I've done the unthinkable. The unbelievable. I started a blog in the year 2009. I might as well have started a dinosaur. If it's any consolation, I've been making websites since I was 14 (15 years now! wow!) and I had blog at the now defunct wimpkiller.com that I posted on for over 5 years!

I'm 29. I live in Austin, TX with my beautiful and hilarious wife. I have cat that she named "Moogs", he looks like a cow. I'm training him to be a dog. I'm the Lead Web Developer for Paravel, who sole purpose is to make radical waves on the internet.

I play guitar and a wide array of other instruments.  I speak japanese.  I can't run very far.  I contribute to the Earth scorching music blog Austin Town Hall from time to time and I drive a Scion XB - I know it says a lot about me, but I'll bear every criticism because it's a good square car. I spend most of my days on the computer soaking in the beta radiation, and then my evenings on the couch watching Law & Order with my wife on my Roku.

Yup. That about sums me up.

elsewhere on the internet

about this theme

This blog is built on Wordpress and this is a custom theme I wrote to replicate the functionality of the popular desktop Twitter app by AteBits, Tweetie for Mac. The icons are mostly from Glyphish.

Blog
Blog

Search