我已经决定放弃模型文件夹和移动的一切回购结构:app/Acme/Foo
自动命名空间别名4
一切都是正确的命名空间,但是当我尝试访问内部app/Acme/Foo/Bar.php
我Bar
类我只能实例它作为new Acme\Foo\Bar();
。否则,laravel会在models文件夹中查找它。唯一的解决方法是在实现Bar
类的文件顶部命名空间别名。任何解决方法?从我理解laravel 5自动处理这个,但切换不是首选选项
我已经决定放弃模型文件夹和移动的一切回购结构:app/Acme/Foo
自动命名空间别名4
一切都是正确的命名空间,但是当我尝试访问内部app/Acme/Foo/Bar.php
我Bar
类我只能实例它作为new Acme\Foo\Bar();
。否则,laravel会在models文件夹中查找它。唯一的解决方法是在实现Bar
类的文件顶部命名空间别名。任何解决方法?从我理解laravel 5自动处理这个,但切换不是首选选项
我只能将它实例化为新的Acme \ Foo \ Bar(); ...唯一的解决方法是在实现Bar类的文件顶部使用命名空间别名。任何解决方法?
有(大多数,见下文)没有解决办法,这是现代PHP的工作原理。你的班级的全名实际上是Acme\Foo\Bar
,所以你需要用它来引用它。如果您想通过短名称(Bar
)引用它,那么在命名空间声明之后,您可以在文件顶部使用use
语句。这是现在如何工作。
Laravel确实为此提供了解决方案。如果您在app/config/app.php
看,你会看到下面的部分
#File: app/config/app.php
...
'aliases' => array(
'App' => 'Illuminate\Support\Facades\App',
'Artisan' => 'Illuminate\Support\Facades\Artisan',
'Auth' => 'Illuminate\Support\Facades\Auth',
'Blade' => 'Illuminate\Support\Facades\Blade',
'Cache' => 'Illuminate\Support\Facades\Cache',
...
'Eloquent' => 'Illuminate\Database\Eloquent\Model',
该阵列可以为充分命名空间类,您设置短的别名。 Laravel主要用于Facades,但它也可以让你做class MyModel extends Eloquent
,其中Eloquent
真的是Illuminate\Database\Eloquent\Model
。您可以将自己的别名添加到此阵列中
'Bar' => 'Acme\Foo\Bar'
然后用Bar
参考全局类。但是,你最好习惯名称类的概念,因为这是大多数PHP框架的方向。另外,如果你很好奇,上面的aliases
数组中的别名是通过PHP的class_alias
函数实现的。