Laravel:模型名称和内置外观之间的冲突

Laravel:模型名称和内置外观之间的冲突,laravel,eloquent,models,conflict,Laravel,Eloquent,Models,Conflict,我的Laravel应用程序中有一个名为事件的模型。正如我刚刚发现的,这在我的模型和内置门面illumb\Support\Facades\Event之间产生了冲突。这里最明显的解决方案是更改我的模型的名称,这并不理想,因为我实在无法为我的模型提供任何有意义的其他名称,或者在app.php中为illumb\Support\Facades\Event重命名别名,我希望避免使用这个别名,因为我担心将来会破坏任何依赖这个别名的东西(我恐怕会忘记) 有人建议我可以使用名称空间,我尝试如下: app/mode

我的Laravel应用程序中有一个名为
事件
的模型。正如我刚刚发现的,这在我的模型和内置门面
illumb\Support\Facades\Event
之间产生了冲突。这里最明显的解决方案是更改我的模型的名称,这并不理想,因为我实在无法为我的模型提供任何有意义的其他名称,或者在
app.php
中为
illumb\Support\Facades\Event
重命名别名,我希望避免使用这个别名,因为我担心将来会破坏任何依赖这个别名的东西(我恐怕会忘记)

有人建议我可以使用名称空间,我尝试如下:

app/models/Event.php

namespace Models; #<-- I've also tried using "\Models" here

class Event extends \Eloquent{
Models\Event::create();  #<-- again, I've also used "\Models\Event"

名称空间模型# 我在早期也犯了这个错误,不一定理解名称空间在整个应用程序中的作用

名称空间应该标记应用程序本身的域或职责内的业务逻辑,因此提供模型名称空间并不一定有用。而是创建一个根名称空间,以应用程序、公司、您或任何您喜欢的名称命名,然后提供一个模型子名称空间

例如:

namespace MyGreatApp\Models;

class Event extends \Eloquent{ }
然后,您可以在以下条件下引用此模型:

use MyGreatApp\Models\Event;

$event = new Event();

从长远来看,这是一种更干净、更有组织的方法。不过,这意味着要将模型移动到另一个文件夹中。但这没什么错。至少通过这种方式,您知道您的MyGreatApp命名空间中有所有自定义代码。:)

我认为你把事情复杂化了。把你的模特叫别的名字就行了。事件“EventModel”可能还可以。是的,我现在就是这么做的。但在这一点上,我真的想知道这是否可行。名称空间是一个有趣的选择。我宁愿按它们的Laravel预期名称调用所有模型,并将它们放在
模型
名称空间中,然后重命名它们,使其不对齐。(1)是否可以像这样引用模型:
MyGreatApp\models\Event::create()
?(2) 在功能上,这与简单地定义
模型
名称空间有什么区别,还是仅仅是设计上的区别?(3) 我是否需要将应用程序的其余部分移动到
MyGreatApp
命名空间中?如果是,我该怎么做?我已经有几年没用过PHP了,所以我对PHP名称空间还不熟悉。使用。。。;语句只是创建一个别名,这样您就不必一直写出它。2) 两者都有。它将您的代码与框架分开,让您可以更轻松地移动代码,还可以在应用程序中实现更清晰的编码和更好的组织。3) 否,仅将自定义代码移动到该文件夹中。起初,您可能只会从命名空间中几乎没有代码的小项目开始,但当您从控制器中删除所有逻辑时,您将在命名空间中为此创建类。:)欢迎回到PHP,我经历了同样的旅程。谢谢。事实证明,我的代码不起作用的原因是我需要在定义名称空间后运行
composer dump autoload
。很好的一点,我应该提到这一点,但我认为你没有走那么远。使用composer dump autoload-o优化自动加载文件的构建。稍后当你的应用程序变大时,它会加快速度!:)此外,如果你还没有看到,它们可能是在互联网上学习拉威尔的最佳资源。完全值得。