@@ -109,20 +109,13 @@ public function overrideEnvironment($environment = null)
109109
110110 /**
111111 * @param array|string $classes
112- *
113- * @throws ConfigurationException
114112 */
115113 public function addPostProcessors ($ classes )
116114 {
117115 $ classes = Arr::wrap ($ classes );
118116
119117 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 );
126119 }
127120 }
128121
@@ -131,24 +124,27 @@ public function addPostProcessors($classes)
131124 */
132125 public function postProcessBlocks ($ blocks )
133126 {
127+ // Global post-processors
134128 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 )) {
145130 continue ;
146131 }
147132
148133 foreach ($ blocks as $ block ) {
149134 $ processor ->process ($ block );
150135 }
151136 }
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+ }
152148 }
153149
154150 public function processFileContents ($ file )
@@ -245,4 +241,36 @@ public function findTorchlightIds($content)
245241
246242 return array_values (array_unique (Arr::get ($ matches , 1 , [])));
247243 }
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+ }
248276}
0 commit comments