我的Laravel应用程序中有一个名为Event
的模型。正如我刚刚发现的那样,这会在我的模型与内置外观Illuminate\Support\Facades\Event
之间产生冲突。这里显而易见的解决方案是更改我的模型的名称,这是不理想的,因为实际上没有其他名称我可以给我的模型有任何意义,或者在app.php
中为{{1}重命名别名我希望避免因为害怕打破将来可能依赖别名的任何东西(恐怕我可能会忘记)。
有人建议我可以使用命名空间,我尝试如下:
应用/模型/ Event.php
Illuminate\Support\Facades\Event
应用/数据库/种子/ DatabaseSeeder.php
namespace Models; #<-- I've also tried using "\Models" here
class Event extends \Eloquent{
当我运行Models\Event::create(); #<-- again, I've also used "\Models\Event"
时,上述所有4种组合都会出现Class 'Models\Event' not found
错误。
也许我根本不理解命名空间,但更紧迫的问题是如何解决我的问题。如果它可以像建议的那样使用名称空间来解决,那很好,但我也对任何其他想法持开放态度。
答案 0 :(得分:3)
我也很早就犯了这个错误,不一定了解命名空间在整个应用程序中的作用。
命名空间应标记域内的业务逻辑或应用程序本身的责任,因此给出模型的命名空间并不一定有用。而是创建一个以应用程序,您的公司,您或任何您喜欢的名称命名的根命名空间,然后提供Model子命名空间。
例如:
namespace MyGreatApp\Models;
class Event extends \Eloquent{ }
然后你会在下面引用这个模型:
use MyGreatApp\Models\Event;
$event = new Event();
从长远来看,这是一种更清洁,更有条理的方法。但这确实意味着将模型移动到不同的文件夹中。但这并没有错。至少就是这样,您知道MyGreatApp命名空间中包含所有自定义代码。 :)