Skip to content

Instantly share code, notes, and snippets.

@Datawalke
Last active October 13, 2016 13:15
Show Gist options
  • Save Datawalke/39c703e14a8f0973e8f6 to your computer and use it in GitHub Desktop.
Save Datawalke/39c703e14a8f0973e8f6 to your computer and use it in GitHub Desktop.
A basic Slim v3 Routing Extension for KnpMenu

Usage

1 Register a MenuFactory and add the extension

<?php
$container['MenuFactory'] = function($c) {
    $menuFactory = new \Knp\Menu\MenuFactory();
    $menuFactory->addExtension(new SlimRoutingExtension($c->get('router')));
    return $menuFactory;
};

2 Add your routes

$app->get('/users', 'App\User\Action\HomeAction:dispatch')
    ->setName('users.list');
$app->get('/users/{id}', 'App\User\Action\ViewAction:dispatch')
    ->setName('users.view');

3 Create your menu!

$menuFactory->createItem('List Users', array('route' => 'users.list'));
$menuFactory->createItem('List Users', array('route' => 'users.view', 'routeParams' => array('id' => 1));
<?php
use Knp\Menu\Factory\ExtensionInterface;
use Slim\Interfaces\RouterInterface;
class SlimRoutingExtension implements ExtensionInterface {
/** @var RouterInterface */
private $router;
public function __construct(RouterInterface $router) {
$this->router = $router;
}
/**
* Builds the full option array used to configure the item.
*
* @param array $options The options processed by the previous extensions
*
* @return array
*/
public function buildOptions(array $options)
{
if(!empty($options['route'])) {
$params = isset($options['routeParams']) ? $options['routeParams'] : array();
$options['uri'] = $this->router->pathFor($options['route'], $params);
}
return $options;
}
/**
* Configures the item with the passed options
*
* @param ItemInterface $item
* @param array $options
*/
public function buildItem(\Knp\Menu\ItemInterface $item, array $options)
{
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment