我已經決定放棄模型文件夾和移動的一切回購結構: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
函數實現的。