Skip to content

Commit 25358a9

Browse files
committed
Added sonata FrontendLinkExtension to render frontend route button
1 parent da561a5 commit 25358a9

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony CMF package.
5+
*
6+
* (c) 2011-2014 Symfony CMF
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Cmf\Bundle\RoutingBundle\Admin\Extension;
13+
14+
use Knp\Menu\ItemInterface as MenuItemInterface;
15+
use Sonata\AdminBundle\Admin\AdminExtension;
16+
use Sonata\AdminBundle\Admin\AdminInterface;
17+
use Sonata\AdminBundle\Form\FormMapper;
18+
use Symfony\Cmf\Component\Routing\RouteReferrersReadInterface;
19+
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
20+
use Symfony\Component\Routing\RouterInterface;
21+
22+
/**
23+
* Admin extension to add a frontend link to the edit tab implementing the
24+
* RouteReferrersReadInterface.
25+
*
26+
* @author Frank Neff <[email protected]>
27+
*/
28+
class FrontendLinkExtension extends AdminExtension
29+
{
30+
/**
31+
* @var RouterInterface
32+
*/
33+
private $router;
34+
35+
/**
36+
* @param RouterInterface $router
37+
*/
38+
public function __construct(RouterInterface $router)
39+
{
40+
$this->router = $router;
41+
}
42+
43+
public function configureTabMenu(
44+
AdminInterface $admin,
45+
MenuItemInterface $menu,
46+
$action,
47+
AdminInterface $childAdmin = null
48+
) {
49+
if (!$subject = $admin->getSubject()) {
50+
return;
51+
}
52+
53+
if (!$subject instanceof RouteReferrersReadInterface) {
54+
throw new InvalidConfigurationException(
55+
sprintf(
56+
'%s can only be used on subjects which implement Symfony\Cmf\Component\Routing\RouteReferrersReadInterface!',
57+
__CLASS__
58+
)
59+
);
60+
}
61+
62+
$uri = $this->router->generate($subject);
63+
64+
$menu->addChild('Open in frontend', array('uri' => $uri, 'linkAttributes' => array('target' => '_blank')));
65+
}
66+
67+
}

Resources/config/admin-phpcr.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<parameter key="cmf_routing.route_document.class">Symfony\Cmf\Bundle\RoutingBundle\Doctrine\Phpcr\Route</parameter>
1111
<parameter key="cmf_routing.redirect_route_document.class">Symfony\Cmf\Bundle\RoutingBundle\Doctrine\Phpcr\RedirectRoute</parameter>
1212
<parameter key="cmf_routing.admin_extension.route_referrers.class">Symfony\Cmf\Bundle\RoutingBundle\Admin\Extension\RouteReferrersExtension</parameter>
13+
<parameter key="cmf_routing.admin_extension.frontend_link.class">Symfony\Cmf\Bundle\RoutingBundle\Admin\Extension\FrontendLinkExtension</parameter>
1314
</parameters>
1415

1516
<services>
@@ -55,5 +56,10 @@
5556
<tag name="sonata.admin.extension"/>
5657
</service>
5758

59+
<service id="cmf_routing.admin_extension.frontend_link" class="%cmf_routing.admin_extension.frontend_link.class%">
60+
<tag name="sonata.admin.extension"/>
61+
<argument type="service" id="cmf_routing.router"/>
62+
</service>
63+
5864
</services>
5965
</container>

0 commit comments

Comments
 (0)