I’m trying to find a way to organize my web folder into high-level application areas, and I’m starting with an admin area. However, the way I understand it, Phoenix encourages the following web folder structure:
It seems a bit odd that on one hand Phoenix encourages domain-oriented organization of code into contexts (each with its own folder structure) in the main application folder, while on the other hand it encourages framework-oriented organization in the web folder.
What I tried so far is enforce the above folder organization, which seems OK up to the point when I try to override the template folder location per view. I don’t see a way to do this. The only option I found was in hello_web.ex, with the root: option to Phoenix.View:
use Phoenix.View, root: "lib/hello_web/templates"
but that seems to just change the root template folder for all views, and cannot be set on a view-by-view basis.
I’ve written some phoenix generators (vphx for “vertical phoenix”) that generate a new app_web.ex file which supports this architecture and generates HTML that respects this folder organization. If people are interested I can release them somewhere. I still haven’t converted the phx.gen.auth generator into the new architecture (this generator is much more complex and generates many more files).
Ok, I’ll publish them after porting the auth generators. I’ve also ported my Mandarin package (a set of generators to generate an admin interface) into “vertical slices” (this version is not yet released).
The big problem with these packages that generate code is how to test them - I’m currently doing manual integration tests only because setting up the infrastructure to generate and test these seems quite complex