Epiphany, a RESTful micro PHP framework I wrote/use for my startups
github.com
github.com
I'm not a fan of large frameworks that do all sorts of voodoo on my behalf. This framework is less than 1300 lines of code and includes
* a RESTful routing module that supports regular expressions
* a templating module
* a session module that supports native, APC and Memcached
* a caching module that supports APC and Memcached
* a config module that supports overloading of multiple config files
* a database module that supports PDO MySql and prepared statements
I've used it on publicitweet.com (sold), textbookrevolt.com and thescholarapp.com. It's got some good usage but I'd like to iron out bugs I haven't come across and let others use it if they'd like.I went down much the same route (though by the looks of it you've done a better job) and recently have decided to scrap the whole thing in favor of Yii, which I really hope is a good long term decision (always dicey).
What are your long term plans, is this a fire-and-forget thing or are you going to continue to maintain it and accept patches and so on ?
Is there a roadmap where you want to go with this ?
It's definitely not fire and forget. I've been using it for over 4 years so I don't have any plans on ditching it. The main point of documenting it was so others would use it and I can improve on the library.
If you look at another one of my libraries on github (https://github.com/jmathai/twitter-async/issues) you'll see that there have been over 90 issues raised by others which I've resolved. It's what's made that library so solid - hoping for the same here.
Funny, you're jmathai, I'm jmattheij !
If you prefer than then I do think the larger frameworks are a good fit. What I'm saying is that I don't prefer that :).
If I need to do a SELECT on a specific field(s) then I write that statement. It's usually a 4 line function in a class that deals primarily with that table (but not necessarily as it may make sense in a different class).
I use static functions for that as well.
class User {
public static function getByEmail($email) {
return getDatabase()->one('SELECT * FROM user WHERE email=:email',
array(':email' => $email));
}
}
I don't typically end up with so many of those that it's unmanageable and writing it takes about 30 seconds.That's my approach. What's your thought on that coming from the mindset that a lot of that is taken care of by the framework? I'm curious since that's not a mindset I've had yet.
The same could be said prior to Yii regarding building from the ground up. Yii shouldn't exist based on your own argument :).
I have a lot of respect for the authors considering the other work they've done. Thanks for the lead on Yii, and OP: your stuff looks pretty good too!
Not to downplay your work, but pretty much all frameworks are written to reduce future work and standardize things. Just like you've done.
I've definitely had that 'too much magic' feeling with frameworks, but that goes away as I learn more about how they work.
I just want the bare essentials taken care of and I have a well established coding style that hasn't been dictated by any framework - for some reason I like that :).
This is definitely not meant to lure people away from larger frameworks but for someone like me who wants something that does less on my behalf.
After looking over it, this is a really framework. There really isn't too much that I would throw out to make it smaller, except maybe the curl wrapping class.
A couple of things that would be nice are:
1) if your Controller classes had some state forcing them to be static like you do means that there could be a lot of duplicated code between similar actions
2) if you had a 'layout' template that could be set that would wrap the results of the actions. Maybe this already exists, I just couldn't find it.
Its very clear that you intend to not do any kinds of magic, so I can see why you left a lot of things out that a lot of other frameworks have. Maybe that is why you don't have a layout wrapper template.
1) I'm not sure exactly what you mean. I handle most of the code duplication in libraries so my static controller methods are usually really small (<15 lines). Let me know if I misunderstood your point.
2) You're right about the layout wrapper being a bit "heavy" for this framework. You can nest layouts to your heart's desire but the views are 100% decoupled from the actions. You can, in fact, use the the template module without using the route module. Not that you'd want to :).
[error] [client 127.0.0.1] File does not exist: C:/Users/Peter/Documents/My Websites/epiphany/database, referer: http://epiphany.peter/examples/
Seems to be some mod_rewrite problem?
(ps: the main page at http://epiphany.peter/examples/ loads fine)
Suggestions anyone?
First item to check is to make sure you have a .htaccess in all your examples subdirectories. It should be part of the repository.
The next task in my mind is to have good unit test coverage.
They're a lot of work to write/maintain so I only write them when the added value exceeds the cost :).