Hi all, When discussing the namespace decision of today's IRC meeting, we realized that we can't make such a decision before having a clear picture of how to organize the Symfony2 universe (everything under the Symfony\ vendor namespace).
So, here goes the RFC. You can find the original here: https://gist.github.com/832486 Please bear with my wording, I'm not good at formulating things. I'm looking forward to hear your comments or adaptions to make this RFC happen. Organization of projects in the Symfony2 universe ================================================= Definitions ----------- "Project": A project is a collection of code maintained by specific persons. Namespacing ----------- Every project in the Symfony2 universe has a namespace under Symfony\. We call this namespace the project-level namespace. Example: Symfony\Twig Symfony\Templating Symfony\Validator Bundles are special projects that reside in sub-namespaces Symfony\Framework or Symfony\CMF, because they share a common architecture (controllers, DI config etc.) and require a specific application structure. Bundles under Symfony\CMF are maintained by a separate group of committers and built on top of Symfony\Framework. Symfony\Framework\SecurityBundle Symfony\CMF\XxxxBundle Important: No project must ever write into project-level namespaces except his own! For example, the Validator project must never define classes in Symfony\Templating. Currently, there'd be 23 project-level namespaces under the Symfony vendor namespace (21 components, Framework, CMF). The expected number in the future is around 40, hosted in various GitHub repositories. Dependencies ------------ Projects can have weak (optional) and strong (required) dependencies. Projects can also be completely independent. Examples (independent): Symfony\Twig Symfony\Validator Examples (dependencies): Symfony\Framework\FrameworkBundle -> Symfony\HttpFoundation, ... Symfony\CMF -> Symfony\Framework Repositories ------------ All projects CAN (not must) be hosted in different GitHub repositories and maintained by different people. The directory structure can be organized like the Doctrine2 repositories and like the current Symfony2 repository: Each repository has a top-level "src" (or "lib") folder and a top-level "tests" folder. Versioning ---------- Projects have independent versioning. So we can talk about Twig v2.0, Validator v2.5, CMF v1.0 etc. Because bundles are very likely to have their own release cycles, they have independent versioning as well, for example SecurityBundle v2.5, FrameworkBundle v2.1 etc. A Symfony Framework release is a combination of specific versions of its bundles and required projects. Package management ------------------ Once we have automated package management, each project, along with its version and dependency definitions, can be delivered in an installable package. Pros and Cons: + clear separation of projects and responsibilities + logical structure for people unrelated to Symfony - BC break, but can be fixed in an automated fashion by recursively renaming all namespaces This proposal is supported by: * bschussek * avalanche123 * Seldaek * johanness * pgodel * henrikbjorn * jmikola * lsmith * jonwage * naderman -- If you want to report a vulnerability issue on symfony, please send it to security at symfony-project.com You received this message because you are subscribed to the Google Groups "symfony developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/symfony-devs?hl=en
