So, I thought I’d give the Zend Framework a try. Please, keep in mind that this was a short trial and the real reason for leaving the framework was a specific unmet need for intermediate LDAP support. I plan on coming back to it and giving it a fuller run but I have to go elsewhere for the moment.
SO, THIS IS A QUICK IMPRESSION.
What I liked:
- lots of flexibility in names and paths
- seemed like reliably tested code
- default directory structure leaves public in top level of project
- LOVED, absolutely LOVED that the project manager replied to my twitter instantly
What I disliked:
- does not ship with a full default directory structure (Rend fixes this, but still). Give me a suggestion and I can change it if the default doesn’t work for me
- minimal LDAP support (auth only). More is coming I know (its in the incubator), and I have a very specific need for it. I’m not going to hold it against ZF. But a guy’s gotta search when he wants to find people at work.
- documentation. A long list of anchors in a longer page? Really? Plus, where, exactly, are the 500 examples in 6 languages?
- there is a lot of typing. Maybe I was following the wrong tutorial but I have to tell the model that the $_POST['title'] should go into the title column when I insert the row? I feel like it could match those for me.
- mixed Camel_And_Deliminated variable names. This is a nitpicky thing, but typing an underscore followed by a capital letter is hard for my hands for some reason.
- error messaging. If I had used the framework before I would probably find the error messaging tight and focused. But, since I had not, it took a bit to figure out what was causing my errors. Probably a shortcoming in my brain architecture, but the errors didn’t seem obvious.
- Google support. This is out of Zend’s control I know, but I was searching and searching for zend tutorial, zend framework tutorial, zend connect to database, etc. and only found a couple of tutorials that were up-to-date and well written. One was Zend’s quickstart (which only has sqlite) and the other was here (which is the one I followed for db stuff).
So, there it is.


Caveat: I’m Software Architect with Zend Framework.
First, thanks for the feedback.
Second, regarding some of your gripes…
We do have a default directory structure — but currently, you need to implement it for each project you create. A new tool, Zend_Tool, will automate this starting with the 1.8 release (coming soon!), but for now, you have to create it.
The documentation page is actually a list of links to individual manual pages. The TOC is *huge*, though, and we’re trying to figure out ways we can simplify it; most likely, we’ll have use some JavaScript to collapse the individual chapter TOCs so you can selectively expand the areas you want to explore. Search, though, is your friend with the ZF manual.
As for the model.. Zend Framework does not have a base model class, for a variety of reasons (google for “Zend Framework model” and you’ll start seeing some of the blog posts). Zend_Db has *many* methods that do exactly what you suggest — allowing you to pass in an array of data that is then inserted or updated. Some of this information may be non-obvious — and that’s when you should reach out the ZF community, which you can find in places like the #zftalk IRC channel on Freenode, or the ZF mailing lists (see http://framework.zend.com/archives for archives and links to subscription information).
Regarding naming conventions: we actually follow PEAR naming conventions. Classes are Namespaced_And_UnderScore_Separated; variable names are camelCased. It’s actually very predictable — if you know the standards. We include the standards in our manual.
Error messages can be problematic, and we’re constantly looking for material to add to our FAQ to make the solutions easier to find; any feedback you can give back is welcome.
Finally, regarding tutorials, this is an area we’ve identified for some time. The problem, chiefly, is time: there are very few of us on the internal team, and it’s hard to get the time to craft quality tutorials. Look for more action on this in the coming months.
Thanks again for your feedback!
Thanks Matthew. I would like to reiterate that I DEEPLY appreciate the personal responses from the ZF team. Color me impressed. Seems like a very fair rebuttal.
Also, I do look forward to working with the framework in more depth. A bunch of people I know [who use ZF] can’t be wrong!
Hey Joseph,
You should give CakePHP a try. It’s a win in most of the departments where you mentioned you didn’t like with ZF, and while we don’t have any LDAP libraries in the core, there are several excellent community-developed packages, along with tutorials, i.e. http://bakery.cakephp.org/articles/view/using-ldap-as-a-datasource-basic-find-example or http://bakery.cakephp.org/articles/view/ldap-models-in-cakephp. Oh, and you can find me on Twitter at @nateabele.
Caveat: I’m the lead developer of CakePHP.
I totally agree with ‘having to create directories’ and ‘error messaging’ parts of zend being annoying….. But then again, after looking and some other frameworks, like symfony, where they automatically build those for you, I kind of tend to prefer zend, without so much automation. I dont think I’ve never had to mingle with the LDAP stuff with ZENd, but I do beleive there is a Zend_LDAP class (which Im sure you have looked into).
Again, the reason I prefer ZEND to other frameworks, is its simplicity and minimal automation, plus having a class for almost every tiny complicated thing I need, like ,RSS parser -> ZEND_RSS, Forms validation -> ZEND_FORMS, and all..!!!
Im glad you’re giving it a chance!!!
Thanks, Nate Abele. I wasn’t going to call it out, but yeah, I went to CakePHP.
Manish Code, yes, more minimal can sometimes be a plus, but for someone starting out with the framework, verbose error messages in particular are very useful.