I use EAV because I have multiple clients using the same user/profile
code. Each client wants a different list of profile fields. I found
myself rewritting the same code slightly different each time. It was
time to automate some of that process.
I have two models Profile and ProfileFields. The ProfileFileds has its
own set of admin actions, Model, controller and view set for adding,
updating the ProfileFields.

In the Profile model itself I have a few fixed fields which are
available for everyone "First Name","Last Name", "email" and also my
foreign key to bind to the user.

> Actually, I can't see how using EAV would mean that updating
> view/models would be unnecessary. If they don't change, what's the
> point in adding new attributes?

The view of the Profile is generated from the data in the
ProfileFileds so It is not being modified manually there is some logic
behind this that generates the display elements. Pretty much like how
cake bakes in the first place. This one just bakes on the fly based on
the available ProfileFileds. Each ProfileFileds recorde has a Group
Level for when the field should be visible so each users gets a
different set of profile fields based on which group(s) they belong
to.

The goal of dynamicly adding a new profile field presents a problem
with existing users of getting them to fill in the new field.
This is solved by checking if the profile for a user is valid when
they login. If it is not valid redirect to the proifle edit. Now when
I add a new field the next time a user logs in he is redirected to
fill in the new field for his profile.
if(!$this->Profile->validates()){
  $this->Session->setFlash(__('Your profile is out of date or missing
new required fields. Please update your profile.',true));
  $this->redirect(array('admin' => false, 'controller' =>
'profiles','action'=>'edit', $this->data['Profile']['id']));
}

I've started to convert this user/profile code to a cake plugin
because the power of cake Plugins make it possible for this User/
Profile plugin to be deployed into any of the apps I create. My apps
are primarily intended to be deployed/run within my client companies
LAN, because the data is somewhat sensitive to that client company.

I agree if this were a single site with a single app the EAV pattern
does not make sense. But my goals are to broaden my client base and
reduce my time to deploy for those clients. User Authentication and
Profile info is almost always a required part of the app and almost
always has a different set of fields. Cake's plugins have really
helped with that goal. And a configurable plugin minimizes the number
of different User profile MVC logic I need to build. I will have one
configurable plugin to maintain for many different sites.

Remember these development design patterns exist for a reason, that
reason is to solve a specific problem. It may not always be clear up
front why the pattern was used when thinking or looking at a single
app. Clearly if the EAV is not solving a problem for you then you
should not be using it. Perhaps your app or goal has different
requirements and the problem you are trying to solve does not benefit
from the EAV pattern.

I intend to make public my User/Profile plugin once it is fully
refined and I have the time to properly write a clean article
explaining all the the objects and what they do. A lot of this code
has come from many different post's and ideas generated in these
forums its only right that I share back to the community. The first
release of this plugin will use Auth but does not use ACL. However I
know ACL is an important piece of the puzzle for some apps, I'm just
waiting for it to mature, or rather I'm waiting for my brain to mature
enough to completely understand cake's implementation of ACL.

-LunarDraco
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to