1 | <?php |
||
19 | class TwigAssetic implements PluginInterface |
||
20 | { |
||
21 | /** |
||
22 | * @var AssetFactory |
||
23 | */ |
||
24 | protected $factory; |
||
25 | |||
26 | /** |
||
27 | * @var AssetWriter |
||
28 | */ |
||
29 | protected $writer; |
||
30 | |||
31 | /** |
||
32 | * Class constructor |
||
33 | * |
||
34 | * @param AssetFactory $factory |
||
35 | * @param AssetWriter $writer |
||
36 | */ |
||
37 | 4 | public function __construct(AssetFactory $factory, AssetWriter $writer) |
|
38 | { |
||
39 | 4 | $this->factory = $factory; |
|
40 | 4 | $this->writer = $writer; |
|
41 | 4 | } |
|
42 | |||
43 | /** |
||
44 | * Check that the view is a twig view |
||
45 | * |
||
46 | * @param ViewInterface $view |
||
47 | * @throws \InvalidArgumentException |
||
48 | */ |
||
49 | 4 | protected function assertView(ViewInterface $view) |
|
50 | { |
||
51 | 4 | if (!$view instanceof TwigView) { |
|
52 | 2 | throw new \InvalidArgumentException("This plugin only works with a Twig view"); |
|
53 | } |
||
54 | 2 | } |
|
55 | |||
56 | |||
57 | /** |
||
58 | * Create an assetic extension for Twig. |
||
59 | * @codeCoverageIgnore |
||
60 | * |
||
61 | * @return AsseticExtension |
||
62 | */ |
||
63 | protected function createExtension() |
||
67 | |||
68 | /** |
||
69 | * Create an assetic formula loader. |
||
70 | * @codeCoverageIgnore |
||
71 | * |
||
72 | * @param \Twig_Environment $twig |
||
73 | * @return TwigFormulaLoader |
||
74 | */ |
||
75 | protected function createFormulaLoader($twig) |
||
83 | |||
84 | /** |
||
85 | * Create an assetic asset manager. |
||
86 | * @codeCoverageIgnore |
||
87 | * |
||
88 | * @return LazyAssetManager |
||
89 | */ |
||
90 | protected function createAssetManager() |
||
94 | |||
95 | /** |
||
96 | * Create an assetic twig resource. |
||
97 | * @codeCoverageIgnore |
||
98 | * |
||
99 | * @param \Twig_Environment $twig |
||
100 | * @param string $template |
||
101 | * @return TwigResource |
||
102 | */ |
||
103 | protected function createResource($twig, $template) |
||
107 | |||
108 | |||
109 | /** |
||
110 | * Called when the plugin is added to the view. |
||
111 | * |
||
112 | * @param ViewInterface $view |
||
113 | */ |
||
114 | 3 | public function onAdd(ViewInterface $view) |
|
120 | |||
121 | /** |
||
122 | * Called when view renders a template. |
||
123 | * |
||
124 | * @param ViewInterface $view |
||
125 | * @param string $template Template filename |
||
126 | * @param array $context |
||
127 | */ |
||
128 | 1 | public function onRender(ViewInterface $view, $template, array $context) |
|
149 | } |
||
150 |
Let’s take a look at an example:
In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different implementation of User which does not have a getDisplayName() method, the code will break.
Available Fixes
Change the type-hint for the parameter:
Add an additional type-check:
Add the method to the interface: