I need some common behaviors in all controllers. Is a good idea have a BaseController and make all controllers extend that class? If so, What is the correct way to avoid the
No, don't do that. Use action helpers to add functionnality to your controller. If you use a base controller, it will quickly become complicated and unsable. Action helpers allow more flexibility.
It's certainly a common approach.
But an article by ZF project lead Matthew Weier O'Phinney explains how action-helpers can provide the same benefits with more flexibility.
In particular, a common base controller often becomes a dumping ground for functionality that is used in multiple-but-not-all controllers, so it become overkill. Action-helpers are kind of a lazy-load alternative, invoking functionality precisely when and where you need it.
Also, the action-helper dispatch hooks - init()
, preDispatch()
and postDispatch()
- allow you to automate plugin-like functionality on a per-controller basis.
I'd go action-helpers. But as with most things, YMMV. ;-)
Yes it is good idea.
What is the correct way to avoid the Fatal error: Class 'BaseController' not found error.
You sholud read more about Zend_Loader, to avoid this error
Yes, this is a good idea and a very common pattern. Check out Subclassing the Action Controller section of the reference ZF manual.