Skip to content

Commit c01bb8d

Browse files
osbretaylorotwell
andauthored
[12.x] Fix group imports in Blade @use directive (#55461)
* Fix group imports in Blade `@use` directive * Update CompilesUseStatements.php --------- Co-authored-by: Taylor Otwell <[email protected]>
1 parent 60125ea commit c01bb8d

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/Illuminate/View/Compilers/Concerns/CompilesUseStatements.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,16 @@ trait CompilesUseStatements
1212
*/
1313
protected function compileUse($expression)
1414
{
15-
$segments = explode(',', preg_replace("/[\(\)]/", '', $expression));
15+
$expression = preg_replace('/[()]/', '', $expression);
16+
17+
// Preserve grouped imports as-is...
18+
if (str_contains($expression, '{')) {
19+
$use = ltrim(trim($expression, " '\""), '\\');
20+
21+
return "<?php use \\{$use}; ?>";
22+
}
23+
24+
$segments = explode(',', $expression);
1625

1726
$use = ltrim(trim($segments[0], " '\""), '\\');
1827
$as = isset($segments[1]) ? ' as '.trim($segments[1], " '\"") : '';

tests/View/Blade/BladeUseTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,26 @@ public function testUseStatementsWithBackslashAtBeginningAndAliasedAreCompiled()
4747
$string = "Foo @use(\SomeNamespace\SomeClass, Foo) bar";
4848
$this->assertEquals($expected, $this->compiler->compileString($string));
4949
}
50+
51+
public function testUseStatementsWithBracesAreCompiledCorrectly()
52+
{
53+
$expected = "Foo <?php use \SomeNamespace\{Foo, Bar}; ?> bar";
54+
55+
$string = "Foo @use('SomeNamespace\{Foo, Bar}') bar";
56+
$this->assertEquals($expected, $this->compiler->compileString($string));
57+
58+
$string = "Foo @use(SomeNamespace\{Foo, Bar}) bar";
59+
$this->assertEquals($expected, $this->compiler->compileString($string));
60+
}
61+
62+
public function testUseStatementWithBracesAndBackslashAreCompiledCorrectly()
63+
{
64+
$expected = "Foo <?php use \SomeNamespace\{Foo, Bar}; ?> bar";
65+
66+
$string = "Foo @use('\SomeNamespace\{Foo, Bar}') bar";
67+
$this->assertEquals($expected, $this->compiler->compileString($string));
68+
69+
$string = "Foo @use(\SomeNamespace\{Foo, Bar}) bar";
70+
$this->assertEquals($expected, $this->compiler->compileString($string));
71+
}
5072
}

0 commit comments

Comments
 (0)