@@ -109,20 +109,13 @@ public function overrideEnvironment($environment = null)
109
109
110
110
/**
111
111
* @param array|string $classes
112
- *
113
- * @throws ConfigurationException
114
112
*/
115
113
public function addPostProcessors ($ classes )
116
114
{
117
115
$ classes = Arr::wrap ($ classes );
118
116
119
117
foreach ($ classes as $ class ) {
120
- if (!in_array (PostProcessor::class, class_implements ($ class ))) {
121
- $ class = is_string ($ class ) ? $ class : get_class ($ class );
122
- throw new ConfigurationException ("Post-processor ' $ class' does not implement " . PostProcessor::class);
123
- }
124
-
125
- $ this ->postProcessors [] = $ class ;
118
+ $ this ->postProcessors [] = $ this ->validatedPostProcessor ($ class );
126
119
}
127
120
}
128
121
@@ -131,24 +124,27 @@ public function addPostProcessors($classes)
131
124
*/
132
125
public function postProcessBlocks ($ blocks )
133
126
{
127
+ // Global post-processors
134
128
foreach ($ this ->postProcessors as $ processor ) {
135
- $ processor = app ($ processor );
136
-
137
- // By default we do _not_ run post-processors when Laravel is compiling
138
- // views, because it could lead to data leaks if a post-processor swaps
139
- // user data in. If the developer understands this, they can turn
140
- // `processEvenWhenCompiling` on and we'll happily run them.
141
- $ processWhenCompiling = property_exists ($ processor , 'processEvenWhenCompiling ' )
142
- && $ processor ->processEvenWhenCompiling ;
143
-
144
- if ($ this ->currentlyCompilingViews && !$ processWhenCompiling ) {
129
+ if ($ this ->shouldSkipProcessor ($ processor )) {
145
130
continue ;
146
131
}
147
132
148
133
foreach ($ blocks as $ block ) {
149
134
$ processor ->process ($ block );
150
135
}
151
136
}
137
+
138
+ // Block specific post-processors
139
+ foreach ($ blocks as $ block ) {
140
+ foreach ($ block ->postProcessors as $ processor ) {
141
+ if ($ this ->shouldSkipProcessor ($ processor )) {
142
+ continue ;
143
+ }
144
+
145
+ $ processor ->process ($ block );
146
+ }
147
+ }
152
148
}
153
149
154
150
public function processFileContents ($ file )
@@ -245,4 +241,36 @@ public function findTorchlightIds($content)
245
241
246
242
return array_values (array_unique (Arr::get ($ matches , 1 , [])));
247
243
}
244
+
245
+ /**
246
+ * @param $processor
247
+ * @return PostProcessor
248
+ *
249
+ * @throws ConfigurationException
250
+ */
251
+ public function validatedPostProcessor ($ processor )
252
+ {
253
+ if (is_string ($ processor )) {
254
+ $ processor = app ($ processor );
255
+ }
256
+
257
+ if (!in_array (PostProcessor::class, class_implements ($ processor ))) {
258
+ $ class = get_class ($ processor );
259
+ throw new ConfigurationException ("Post-processor ' $ class' does not implement " . PostProcessor::class);
260
+ }
261
+
262
+ return $ processor ;
263
+ }
264
+
265
+ protected function shouldSkipProcessor ($ processor )
266
+ {
267
+ // By default we do _not_ run post-processors when Laravel is compiling
268
+ // views, because it could lead to data leaks if a post-processor swaps
269
+ // user data in. If the developer understands this, they can turn
270
+ // `processEvenWhenCompiling` on and we'll happily run them.
271
+ $ processWhenCompiling = property_exists ($ processor , 'processEvenWhenCompiling ' )
272
+ && $ processor ->processEvenWhenCompiling ;
273
+
274
+ return $ this ->currentlyCompilingViews && !$ processWhenCompiling ;
275
+ }
248
276
}
0 commit comments