- Remove Symfony 6 deprecations
- Enforce phpstan rules (max level)
- Allowed Symfony 5 components
- Removed support for unsupported Symfony versions (4.0 and 4.1)
- Allowed Twig 3
- Raised PHP requirements
- [BC break] Enforced strong types on all interfaces and classes
- [BC break] Removed deprecated features. Specifically, MenuFactory and MenuItem are not accepting a
null
name anymore
- Fixed Twig deprecations
- Switched to namespaced Twig
- Fixed sprintf use
- Deprecated the Silex 1 KnpMenuServiceProvider. Use the
knplabs/knp-menu-silex
package instead. - Fixed RouteVoter to also match on non-string request arguments like integers as long as both string representations are identical.
- Add Symfony 4 support
- Added a new function to twig:
knp_menu_get_current_item
- Made compatible with Symfony 3
- Added a new function to twig:
knp_menu_get_breadcrumbs_array
- Added a new filter to twig:
knp_menu_as_string
- Added 2 new tests to twig:
knp_menu_current
,knp_menu_ancestor
- Made the templates compatible with Twig 2
- Add menu and renderer providers supporting any ArrayAccess implementations. The Pimple-based providers (supporting only Pimple 1) are dperecated in favor of these new providers.
- Fixed voter conventions on RouteVoter
- [BC break] Clean code and removed the BC layer
- [BC break] Added the new
Integration
namespace and removed theSilex
one. - Added a new Voter based on regular expression:
Knp\Menu\Matcher\Voter\RegexVoter
-
[BC break] Changed the TwigRenderer to accept a menu template only as a string
-
[BC break] Refactored the way of rendering twig templates. Every template should extends the
knp_menu.html.twig
template. -
Introduced extension points in the MenuFactory through
Knp\Menu\Factory\ExtensionInterface
-
[BC break compared to 2.0 alpha 1] The inheritance extension points introduced in alpha1 are deprecated in favor of extensions and will be removed before the stable release.
-
Knp\Menu\Silex\RouterAwareFactory
is deprecated in favor ofKnp\Menu\Silex\RoutingExtension
. -
[BC break] Deprecated the methods
createFromArray
andcreateFromNode
in the MenuFactory and removed them fromKnp\Menu\FactoryInterface
. UseKnp\Menu\Loader\ArrayLoader
andKnp\Menu\Loader\NodeLoader
instead. -
[BC break] Deprecated the methods
moveToPosition
,moveToFirstPosition
,moveToLastPosition
,moveChildToPosition
,callRecursively
,toArray
,getPathAsString
andgetBreadcrumbsArray
in the MenuItem and removed them fromKnp\Menu\ItemInterface
. UseKnp\Menu\Util\MenuManipulator
instead. -
Made the RouterVoter compatible with SensioFrameworkExtraBundle param converters
-
Added the possibility to match routes using a regex on their name in the RouterVoter
-
[BC break compared to 2.0 alpha 1] Refactored the RouterVoter to make it more flexible The way to pass routes in the item extras has changed.
Before:
'extras' => array( 'routes' => array('foo', 'bar'), 'routeParameters' => array('foo' => array('id' => 4)), )
After:
'extras' => array( 'routes' => array( array('route' => 'foo', 'parameters' => array('id' => 4)), 'bar', ) )
The old syntax is kept until the final release, but using it will trigger a E_USER_DEPRECATED error.
- Added protected methods
buildOptions
andconfigureItem
in the MenuFactory as extension point by inheritance - [BC break] Refactored the way to mark items as current
setCurrentUri
,getCurrentUri
andgetCurrentItem
have been removed from the ItemInterface. Determining the current items is now delegated to a matcher, and the default implementation uses voters to apply the matching. Getting the current items can be done thanks to the CurrentItemFilterIterator. - [BC break] The signature of the CurrentItemFilterIterator constructor changed to accept the item matcher
- [BC break] Changed the format of the breadcrumb array
Instead of storing the elements with the label as key and the uri as value
the array now stores an array of array elements with 3 keys:
label
,uri
anditem
.
- Updated the Silex service provider for the change in the interface
- Added the children attributes and the extras in the array export
- Marked
Knp\Menu\ItemInterface::getCurrentItem
as deprecated - Added a recursive filter iterator keeping only displayed items
- Added a filter iterator keeping only current items
- Added a recursive iterator for the item
- Fixed building an array of breadcrumbs when a label has only digits
- Added a way to mark a label as safe
- Refactored the ListRenderer to be consistent with the TwigRenderer and provide the same extension points
- Added a way to attach extra data to an item
- Removed unnecessary optimization in the TwigRenderer
- Added some whitespace control in the Twig template to ensure an empty rendering is really empty
- [BC break] Use the childrenAttributes for the root instead of the attributes
- Made the default options configurable for the TwigRenderer
- Added the support for menu registered as factory in PimpleProvider
- Added a way to use the options in
knp_menu_get()
in Twig templates - Added an array of options for the MenuProviderInterface
- Added a template to render an ordered list
- Refactored the template a bit to make it easier to use an ordered list
- Allow omitting the name of the child in
fromArray
(the key is used instead)
- Add composer.json file
- Added more flexible list element blocks
- Add support for attributes on the children collection.
- Added a default renderer
- Added a ChainProvider for the menus.
- Added the Silex extension
- Added a RouterAwareFactory
- Added an helper to be able to reuse the logic more easily for other templating engines
- Added a way to retrieve an item using a path in a menu tree
- Changed the toArray method to use a depth instead of simply using a boolean flag
- Refactored the export to array and the creation from an array
- Added better support for encoding problems when escaping a string in the ListRenderer
- Added a Twig renderer
- Added missing escaping in the ListRenderer
- Renamed some methods in the ItemInterface
- Removed the configuration of the current item as link from the item
- Refactored the ListRenderer to use options
- Changed the interface of callRecursively
- Refactored the NodeInterface to be consistent
- Moved the creation of the item to the factory
- Added a Twig extension to render the menu easily
- Changed the menu provider interface with a pimple-based implementation
- Added a renderer provider to get a renderer by name and a Pimple-based implementation
- Removed the renderer from the menu
- Removed the num in the item by refactoring isLast and isFirst
- Changed the RendererInterface to accept an array of options to be more flexible
- Added an ItemInterface
- Initial import of KnpMenuBundle decoupled classes with a new namespace