Skip to content

Commit e4ffa95

Browse files
[10.x]: Add Blade @use directive (#49179)
* Add Blade @use directive * Allow for `use` without `as` * Update CompilesUseStatements.php --------- Co-authored-by: Taylor Otwell <[email protected]>
1 parent 5172665 commit e4ffa95

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

src/Illuminate/View/Compilers/BladeCompiler.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class BladeCompiler extends Compiler implements CompilerInterface
3333
Concerns\CompilesStacks,
3434
Concerns\CompilesStyles,
3535
Concerns\CompilesTranslations,
36+
Concerns\CompilesUseStatements,
3637
ReflectsClosures;
3738

3839
/**
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace Illuminate\View\Compilers\Concerns;
4+
5+
trait CompilesUseStatements
6+
{
7+
/**
8+
* Compile the use statements into valid PHP.
9+
*
10+
* @param string $expression
11+
* @return string
12+
*/
13+
protected function compileUse($expression)
14+
{
15+
$segments = explode(',', preg_replace("/[\(\)]/", '', $expression));
16+
17+
$use = trim($segments[0], " '\"");
18+
$as = isset($segments[1]) ? ' as '.trim($segments[1], " '\"") : '';
19+
20+
return "<?php use \\{$use}{$as}; ?>";
21+
}
22+
}

tests/View/Blade/BladeUseTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace Illuminate\Tests\View\Blade;
4+
5+
class BladeUseTest extends AbstractBladeTestCase
6+
{
7+
public function testUseStatementsAreCompiled()
8+
{
9+
$string = "Foo @use('SomeNamespace\SomeClass', 'Foo') bar";
10+
$expected = "Foo <?php use \SomeNamespace\SomeClass as Foo; ?> bar";
11+
$this->assertEquals($expected, $this->compiler->compileString($string));
12+
}
13+
14+
public function testUseStatementsWithoutAsAreCompiled()
15+
{
16+
$string = "Foo @use('SomeNamespace\SomeClass') bar";
17+
$expected = "Foo <?php use \SomeNamespace\SomeClass; ?> bar";
18+
$this->assertEquals($expected, $this->compiler->compileString($string));
19+
}
20+
}

0 commit comments

Comments
 (0)