We want Yii 3 to:
- Not limit developer in choosing architecture. Allow anything from "classic" MVC to DDD.
- Be based on best practices such as SOLID, GRASP etc. and teach them to community.
- Keep most good things from Yii 2.
- Be more open to global PHP community and infrastructure.
PSR compliance helps with customizability, ability to use general PHP libraries and implement less wrappers. Here's the list of PSRs we want to implement.
Implemented as a separate package that is not dependent on a framework.
- Framework packages should depend on interface only.
- Split drivers into packages.
- Autoloading is fine already.
- Docuement on how it works.
- Remove our own implementation. At least for now.
- Framework packages should depend on interfaces only.
- Implement decorators for Request, ServerRequest, Response adding handy methods.
Implemented as a separate package that is not dependent on a framework.
- Framework packages should not use container directly including interface. One should be able to instantiate everything manually.
- Finish refactoring.
- Remove all framework-specific implementations from the package. Move to framework.
- Make sure code follows it.
- Automate fixing style before release.
- Implement as a separate library.
- Use in other packages.
- Polish.
- Rewrite HTTP flow to PSR-7 request-reponse + formatting response via emitter.
- Provide SAPI emitter out of the box.
- Make it possible to use alternative emitters such as RoadRunner.
- Support middleware.
- Implement filters as middleware:
- Rate limiting
- Basic auth
- Digest auth
- Re-implement router w/ middleware support for route groups.
- Filters should be middlewares.
Implemented as a separate package that is not dependent on a framework.
- Framework packages should depend on interfaces only.
- Split drivers into packages.
- Use PSR factories.
- Remove our own implementation. At least for now.
- Framework packages should depend on interfaces only.
- Make sure PHP 7.2 type hinting is used everywhere.
- Make sure types are as definitive as possible. Avoid varying types if possible.
- Drop basic/advanced.
- Create a single application template that works out of the box.
Implemented as a separate package that is not dependent on a framework.
- DSL for configuration.
- Ability to route to any callable.
- Named routes.
- Route groups w/ middleware support.
- Make sure interfaces follow "interface segregation" principle.
- Do not use public properties.
- Do not use
init(). - Do not inherit from
BaseObjectorComponent. Remove these. - No globals.
- No static calls except helpers that are final.
- Prefer throwing exceptions to fixing input.
- Release command line tool
- Development command line tool (symlinks packages into usable application)
- Separate web and console application
- Possibly eliminate base application
- Create interface for console
- Implementation may be one of the popular ones
- Follow best practices.
- Don't use "MVC" term.
- Upgrading from Yii 2.
RBAC is implemented as framework-independent package.
- Make sure it follows best practices.
- Split drivers into packages.
View is implemented as framework-independent package.
- Finish refactoring.
- Decide on namespaces.
- Clean up error handler. Make sure error handler catches fatals and is using response.
- Make validators independent from models to allow reusing them in handlers.
- Split IdentityInterface.