File tree Expand file tree Collapse file tree 3 files changed +43
-7
lines changed
Expand file tree Collapse file tree 3 files changed +43
-7
lines changed Original file line number Diff line number Diff line change @@ -505,6 +505,9 @@ $namespace = $file->addNamespace('Foo');
505505$class = $namespace->addClass('A');
506506$class->addMethod('hello');
507507
508+ // or insert an existing namespace into the file
509+ // $file->addNamespace(new Nette\PhpGenerator\PhpNamespace('Foo'));
510+
508511echo $file;
509512
510513// or use PsrPrinter for output compatible with PSR-2 / PSR-12
Original file line number Diff line number Diff line change @@ -56,15 +56,23 @@ public function addTrait(string $name): ClassType
5656 }
5757
5858
59- public function addNamespace (string $ name ): PhpNamespace
59+ /** @param string|PhpNamespace $namespace */
60+ public function addNamespace ($ namespace ): PhpNamespace
6061 {
61- if (!isset ($ this ->namespaces [$ name ])) {
62- $ this ->namespaces [$ name ] = new PhpNamespace ($ name );
63- foreach ($ this ->namespaces as $ namespace ) {
64- $ namespace ->setBracketedSyntax (count ($ this ->namespaces ) > 1 && isset ($ this ->namespaces ['' ]));
65- }
62+ if ($ namespace instanceof PhpNamespace) {
63+ $ res = $ this ->namespaces [$ namespace ->getName ()] = $ namespace ;
64+
65+ } elseif (is_string ($ namespace )) {
66+ $ res = $ this ->namespaces [$ namespace ] = $ this ->namespaces [$ namespace ] ?? new PhpNamespace ($ namespace );
67+
68+ } else {
69+ throw new Nette \InvalidArgumentException ('Argument must be string|PhpNamespace. ' );
70+ }
71+
72+ foreach ($ this ->namespaces as $ namespace ) {
73+ $ namespace ->setBracketedSyntax (count ($ this ->namespaces ) > 1 && isset ($ this ->namespaces ['' ]));
6674 }
67- return $ this -> namespaces [ $ name ] ;
75+ return $ res ;
6876 }
6977
7078
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ use Nette \PhpGenerator \PhpFile ;
6+ use Nette \PhpGenerator \PhpNamespace ;
7+
8+ require __DIR__ . '/../bootstrap.php ' ;
9+
10+ $ namespace = new PhpNamespace ('Foo ' );
11+ $ namespace ->addClass ('Bar ' );
12+
13+ $ phpFile = new PhpFile ;
14+ $ phpFile ->addNamespace ('Foo ' );
15+ $ phpFile ->addNamespace ($ namespace ); // overwrite
16+
17+
18+ same ('<?php
19+
20+ namespace Foo;
21+
22+ class Bar
23+ {
24+ }
25+ ' , (string ) $ phpFile );
You can’t perform that action at this time.
0 commit comments