@@ -38,7 +38,7 @@ public function __construct(
3838 protected function configure (): void
3939 {
4040 $ this ->setName ($ this ->getCommandName ('static ' , 'clean ' ))
41- ->setDescription ('Clean var/view_preprocessed and pub/static directories for specific theme ' )
41+ ->setDescription ('Clean var/view_preprocessed, pub/static, var/page_cache, var/tmp and generated directories for specific theme ' )
4242 ->addArgument (
4343 'themename ' ,
4444 InputArgument::OPTIONAL ,
@@ -91,6 +91,15 @@ protected function executeCommand(InputInterface $input, OutputInterface $output
9191 // Clean pub/static
9292 $ cleaned += $ this ->cleanPubStatic ($ themeName );
9393
94+ // Clean var/page_cache
95+ $ cleaned += $ this ->cleanPageCache ();
96+
97+ // Clean var/tmp
98+ $ cleaned += $ this ->cleanVarTmp ();
99+
100+ // Clean generated
101+ $ cleaned += $ this ->cleanGenerated ();
102+
94103 if ($ cleaned > 0 ) {
95104 $ this ->io ->success (sprintf (
96105 "Successfully cleaned %d director%s for theme '%s' " ,
@@ -191,6 +200,89 @@ private function cleanPubStatic(string $themeName): int
191200 return $ cleaned ;
192201 }
193202
203+ /**
204+ * Clean var/page_cache directory
205+ *
206+ * @return int Number of directories cleaned
207+ */
208+ private function cleanPageCache (): int
209+ {
210+ $ cleaned = 0 ;
211+ $ varDirectory = $ this ->filesystem ->getDirectoryWrite (DirectoryList::VAR_DIR );
212+
213+ if ($ varDirectory ->isDirectory ('page_cache ' )) {
214+ try {
215+ $ varDirectory ->delete ('page_cache ' );
216+ $ this ->io ->writeln (' <fg=green>✓</> Cleaned: var/page_cache ' );
217+ $ cleaned ++;
218+ } catch (\Exception $ e ) {
219+ $ this ->io ->writeln (sprintf (' <fg=red>✗</> Failed to clean: var/page_cache - %s ' , $ e ->getMessage ()));
220+ }
221+ }
222+
223+ return $ cleaned ;
224+ }
225+
226+ /**
227+ * Clean var/tmp directory
228+ *
229+ * @return int Number of directories cleaned
230+ */
231+ private function cleanVarTmp (): int
232+ {
233+ $ cleaned = 0 ;
234+ $ varDirectory = $ this ->filesystem ->getDirectoryWrite (DirectoryList::VAR_DIR );
235+
236+ if ($ varDirectory ->isDirectory ('tmp ' )) {
237+ try {
238+ $ varDirectory ->delete ('tmp ' );
239+ $ this ->io ->writeln (' <fg=green>✓</> Cleaned: var/tmp ' );
240+ $ cleaned ++;
241+ } catch (\Exception $ e ) {
242+ $ this ->io ->writeln (sprintf (' <fg=red>✗</> Failed to clean: var/tmp - %s ' , $ e ->getMessage ()));
243+ }
244+ }
245+
246+ return $ cleaned ;
247+ }
248+
249+ /**
250+ * Clean generated directory
251+ *
252+ * @return int Number of directories cleaned
253+ */
254+ private function cleanGenerated (): int
255+ {
256+ $ cleaned = 0 ;
257+ $ generatedDirectory = $ this ->filesystem ->getDirectoryWrite (DirectoryList::GENERATED );
258+
259+ try {
260+ // Get all items in generated directory
261+ $ items = $ generatedDirectory ->read ();
262+ foreach ($ items as $ item ) {
263+ // Skip .htaccess file
264+ if ($ item === '.htaccess ' ) {
265+ continue ;
266+ }
267+
268+ try {
269+ $ generatedDirectory ->delete ($ item );
270+ } catch (\Exception $ e ) {
271+ $ this ->io ->writeln (sprintf (' <fg=red>✗</> Failed to clean: generated/%s - %s ' , $ item , $ e ->getMessage ()));
272+ }
273+ }
274+
275+ if (!empty ($ items )) {
276+ $ this ->io ->writeln (' <fg=green>✓</> Cleaned: generated/* ' );
277+ $ cleaned ++;
278+ }
279+ } catch (\Exception $ e ) {
280+ $ this ->io ->writeln (sprintf (' <fg=red>✗</> Failed to clean: generated - %s ' , $ e ->getMessage ()));
281+ }
282+
283+ return $ cleaned ;
284+ }
285+
194286 /**
195287 * Parse theme name into vendor and theme parts
196288 *
0 commit comments