Tapestry Training -- From The Source

Let me help you get your team up to speed in Tapestry ... fast. Visit howardlewisship.com for details on training, mentoring and support!

Wednesday, July 26, 2006

Tapestry for PHP?

PRADO is a PHP framework expressly inspired by Tapestry. As you might expect, all I've had a chance to do is glance over the documentation, but it looks very nice, and their site is very professional and slick.

I suspect the relationship between PRADO and Tapestry is the same as between Tapestry and WebObjects ... the precursor "proves" the space is viable, but I doubt the implementation is all that similar, given the different languages involved.

Still, best of luck ... but don't expect any framework, on any platform, to keep up with Tapestry 5!


kgilpin said...

I have built some nice professional sites using Tapestry. I use Hivemind for all my server side dependency injection.

However for my latest project I am using Ruby on Rails for the web UI, connecting to a Java backend. It's a bit of a pain to expose the necessary services, but it's kind of a good pain because it makes you think about what the services should be.

And with the immediacy and dynamic-ness of RoR and the compact syntax of Ruby (like Python), it's actually hard for me to imagine going back to anything that I need to compile, use template syntax, type cast, generate wrapper classes.

So this sounds like a statement but it's also a question. Have you used RoR and do you have any doubts that a compiled statically typed language is the right approach for user interface development?

Thierry Chatel said...

I used Prado for several projects at work, since it's first version. It's a good framework, but not really a Tapestry clone. It has borrowed several ideas, from Tapestry but also from .net, or even Delphi. The more surprising is that the result is rather nice and coherent.

For instance, page templates are more similar to JSF ones, with components embedded as special tags, and you can also embbed script like in JSP.

Prado is easy to learn as long as you not have to build some complex components. But with some work I could get a good toolkit of technical components, which I extend in an distinct HTML-looking version for each project, and then making web pages with the right look is very quick.

It has also a nice documentation, and don't try to hide what should be the best documentated part of each even-driven framework, the page life cycle : http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Pages

With that framework you can nearly forget that you are working in PHP... until you look at the performances : reading and parsing more than 50 files for each request has some effect...

Andreas Bulling said...

Nice to see that my yesterday mail to you resulted in a corresponding entry in your blog ;-) I'll definitely try PRADO to see if it's able to bring Tapestry (-practices) to the PHP world.

wei said...

File IO are very expensive in PHP. File IO problems can be fairly easily over come using two forms of caching. Both are very simple to setup.

1) Install APC byte code cache, this caches the php script as byte code in memory.

2) Install the distributed memcache server, and enable caching in Prado to use the memcache with 1 line configuation.

The cache 2) aleviates Prado from going to the disk to fetch the page template and avoids parsing as well.

Nanda said...

have you try to use wedge (http://wedge.sourceforge.net/)? This could be better than Tapestry since the pages are all POJO

Anonymous said...


I'm sorry..your doing what!!!??

How, pray tell, are you hooking up rails to a java backend?

Kevin Gilpin said...

XMLRPC. The payload can either be according to the XMLRPC spec, or a single String encoded as JSON (XMLRPC is verbose).

Another suggestion is to use Hessian but I haven't tried that.

Anonymous said...

And there is also a better Tapestry called Wicket(http://wicket.sourceforge.net/)
which Tapestry 5 is now trying to catch up.

Howard said...

Wicket has a nice community and a few nice ideas, but it does not compare to what I have planned for Tapestry 5. I believe Java is going to thrive at the high end and performance is going to be one of the differentiators from Ruby on Rails. In addition, the Wicket model can't address the kind of short-cycle development issues that will be part of Tapestry 5. I think Wicket is fairly broken in that it stores the component model inside the HttpSession. This has been a critical flaw for JSF as well, where they've realized that they don't have a proper approach to handling true scalability. Wicket is a neater, cleaner version of Tapestry 1.0 or maybe 2.0. I've said in the past that I found it quite unambitious for starting from scratch. I'm now working on Tapestry 5 which is quite ambitious.

Lewis said...


Have you noticed Wicket is going to become an Apache project soon? If it's as bad as you say surely apache would'nt have considered it.
I think the Wicket team are doing a great job and have a compelling framework.
With the direction you have chosen of making radical changes to any major Tapestry release and not being backward compatible, one doesn't need to look in a crystal ball to be able to predict that Tapestry would loose more user base than gain by the time release 5 comes out. And where would they all go? To a framework that has already stolen a good number of Tapestry users- Wicket.

Anonymous said...

The reason Wicket is being considered an apache project is because apache finally realized the mistake they made promoting tapestry as the next java webframework.

Igor Vaynberg said...

Its really sad to see these kinds of comments from wicket users, it is not the kind of community I was helping to build. If you are going to write comments like these at least have the balls to sign them with your name.

s_dani_g said...

Actually (credit where credit is due), only one or two wicket users were nasty... considering that someone posted to the wicket-user mailing list urging everyone to swamp this comment thread, I have to take my hat off to their maturity in not doing so and rebuffing the original poster.

(I'm a Tapestry user, btw)