14
14
use Knp \Menu \ItemInterface as MenuItemInterface ;
15
15
use Sonata \AdminBundle \Admin \AdminExtension ;
16
16
use Sonata \AdminBundle \Admin \AdminInterface ;
17
- use Sonata \ AdminBundle \ Form \ FormMapper ;
17
+ use Symfony \ Bundle \ FrameworkBundle \ Translation \ Translator ;
18
18
use Symfony \Cmf \Component \Routing \RouteReferrersReadInterface ;
19
19
use Symfony \Component \Config \Definition \Exception \InvalidConfigurationException ;
20
+ use Symfony \Component \Routing \Exception \ExceptionInterface as RoutingExceptionInterface ;
21
+ use Symfony \Component \Routing \Route ;
20
22
use Symfony \Component \Routing \RouterInterface ;
21
23
22
24
/**
@@ -32,12 +34,19 @@ class FrontendLinkExtension extends AdminExtension
32
34
*/
33
35
private $ router ;
34
36
37
+ /**
38
+ * @var Translator
39
+ */
40
+ private $ translator ;
41
+
35
42
/**
36
43
* @param RouterInterface $router
44
+ * @param Translator $translator
37
45
*/
38
- public function __construct (RouterInterface $ router )
46
+ public function __construct (RouterInterface $ router, Translator $ translator )
39
47
{
40
48
$ this ->router = $ router ;
49
+ $ this ->translator = $ translator ;
41
50
}
42
51
43
52
public function configureTabMenu (
@@ -50,18 +59,32 @@ public function configureTabMenu(
50
59
return ;
51
60
}
52
61
53
- if (!$ subject instanceof RouteReferrersReadInterface) {
62
+ if (!$ subject instanceof RouteReferrersReadInterface && ! $ subject instanceof Route ) {
54
63
throw new InvalidConfigurationException (
55
64
sprintf (
56
- '%s can only be used on subjects which implement Symfony\Cmf\Component\Routing\RouteReferrersReadInterface! ' ,
65
+ '%s can only be used on subjects which implement Symfony\Cmf\Component\Routing\RouteReferrersReadInterface or Symfony\Component\Routing\Route ! ' ,
57
66
__CLASS__
58
67
)
59
68
);
60
69
}
61
70
62
- $ uri = $ this ->router ->generate ($ subject );
71
+ try {
72
+ $ uri = $ this ->router ->generate ($ subject );
73
+ } catch (RoutingExceptionInterface $ e ) {
74
+ // we have no valid route
75
+ return ;
76
+ }
63
77
64
- $ menu ->addChild ('Open in frontend ' , array ('uri ' => $ uri , 'linkAttributes ' => array ('target ' => '_blank ' )));
78
+ $ menu ->addChild (
79
+ $ this ->translator ->trans ('admin.menu_frontend_link_caption ' , array (), 'CmfRoutingBundle ' ),
80
+ array (
81
+ 'uri ' => $ uri ,
82
+ 'linkAttributes ' => array (
83
+ 'target ' => '_blank ' ,
84
+ 'title ' => $ this ->translator ->trans ('admin.menu_frontend_link_title ' , array (), 'CmfRoutingBundle ' )
85
+ )
86
+ )
87
+ );
65
88
}
66
89
67
90
}
0 commit comments