Correctly instanciating models in components
06 Aug 2010I sometime need access to a specific model in a component. Say a User
model for checking user rights in an Auth
component. In that cases, I just create an instance of the model by calling a $myModel = &ClassRegistry::init($myModelName)
. It works perfectly.
Today I found that it wasn't working exactly as I wanted. In fact, behaviors used by models loaded that way are not completely set up. All their callback methods (beforeFind
, afterFind
, beforeSave
, afterSave
) works as expected, but the main setup
method is never called.
This caused some havoc in my app because some *reaaaaally *important stuff was defined in the setup
method
There I fixed it
I just manually fired all the setup
methods by calling a simple :
foreach($myModel->Behaviors->_attached as $behaviorName) {
$myModel->Behaviors->{$behaviorName}->setup($myModel);
}
Once again, small fix, but does the trick. I did not file a bug report because I'm not really sure this is bug or if that is so by design.
Want to add something ? Feel free to get in touch on Twitter : @pixelastic